Log of the #fcrepo channel on chat.freenode.net

Using timezone: Eastern Standard Time
* yinlin leaves05:03
* yinlin joins05:05
* yinlin_ joins05:06
* yinlin leaves
* yinlin joins
* yinlin_ leaves05:10
* yinlin leaves05:26
* yinlin joins05:27
* ajs6f joins07:57
* acoburn joins08:17
ajs6f: let me know if you'd like me to squash these commits: https://github.com/fcrepo4/fcrepo4/pull/100308:24
<ajs6f>acoburn: Ooh, good point— yes please.
<acoburn>ajs6f: squashed08:26
* github-ff joins08:27
[fcrepo4] ajs6f closed pull request #1003: Emit complete events for MOVE operations (master...fcrepo-1937) https://git.io/v2xnf
* github-ff leaves
<ajs6f>acoburn: Merged
* jcoyne joins08:28
<ajs6f>acoburn++ # now we need to figure out 1945
* dwilcox joins08:37
* dhlamb joins08:38
* whikloj joins08:51
* travis-ci joins08:58
fcrepo4/fcrepo4#4356 (master - 0b343d2 : A. Soroka): The build passed.
Change view : https://github.com/fcrepo4/fcrepo4/compare/fe02b62be2b1...0b343d20cd16
Build details : https://travis-ci.org/fcrepo4/fcrepo4/builds/115315383
* travis-ci leaves
* peichman joins09:18
* dhlamb leaves09:44
* peichman leaves09:45
* tjohnson joins10:27
* github-ff joins10:34
[fcrepo4] acoburn opened pull request #1004: Fix malformed path in JMS events for URI fragments (master...fcrepo-1528) https://git.io/vaGGB
* github-ff leaves
* dwilcox leaves11:08
* dwilcox joins11:12
<ajs6f>acoburn: I adopted Converter. It was a mustake, in hindsight. (that's a mistake you had to make in order to learn why you shouldn't have done it). The semantics are correct but the machinery is unwieldy and we didn11:15
t use it well anyway.11:16
<acoburn>ajs6f: if I understand it correctly, the Converter object holds a bijective function that can be reversed, correct?11:18
ajs6f: effectively: f(x) = y, where f(x) is onto the resulting set11:19
<ajs6f>acoburn: A function that preserves semantics, at least. Whether that function holds in exactly the same way between syntaxes, prolly not.
"<p>The reverse operation <b>may</b> be a strict <i>inverse</i> (meaning that {@code11:20
* converter.reverse().convert(converter.convert(a)).equals(a)} is always true). However, it is
* very common (perhaps <i>more</i> common) for round-trip conversion to be <i>lossy</i>."
acoburn: No, I don't see where it is required to be surjective.
acoburbn: And therefor not bijective. Just "reversable", for a fairly loose sense of that word.11:21
<acoburn>ajs6f: ok, that's hard to enforce anyway
<ajs6f>acoburn: I don't even see that it is a total funtion.
acoburn: In Java, impossible.
acoburn: It's just real loosey-goosey, and I wanted it to be more than it is.
acoburn: We do need to swap it for something we define carefully, and yes, that will be a huge freakin' deal.11:22
<acoburn>ajs6f: so would it be fair to say that we would want an interface that holds a Function<T, U> and Function<U, T> objects11:23
<ajs6f>acoburn: Well, that can do the same things as such a thing could do. Let's not use words like "hold" because we may want to do very different impls. Let's talk about operations and guarantees on those operations.11:24
"forward" and "reverse" or "in" and "out" or "to" and "from", or whatever the most neutral language we can think of is.11:25
<acoburn>ajs6f: "to" and "from" make a lot of sense to me
<ajs6f>acoburn: Okay. There's also "chocolate-covered" and "carob-coated", but that is a little more oblique.11:26
<acoburn>ajs6f: but the idea is that x = to(from(x)) = from(to(x))11:27
<ajs6f>acoburn: To begin with. Then we have to talk about what = means. Is it ==, or .equals in x-space, or .equals in y-space, or do you pass in a Comparator when you build a convertor, or what?11:28
<acoburn>ajs6f: what would you prefer?11:30
<ajs6f>acoburn: I think we have to look at our own use cases, but generally the parameterization is most flexible and includes the others, so it is safest.11:31
acoburn: Maybe there is a set of nested types that begin with parameterized equality and specifies down into a pair that answer the question "which side do you get equality from".11:35
<acoburn>ajs6f: looking at our use of Converters, seems that mostly it's about translating between a Jena Resource and a FedoraResource11:36
ajs6f: also some String <-> String conversions11:37
<ajs6f>acoburn: There's a whole backstory to that, of course. We didn't want to tie those things together because if you shift your position in the larger netowkr, suddenly all your identifiers change, so the last we wanted to do was record HTTP addresses in the repository.
<acoburn>ajs6f: of course, that makes a lot of sense11:38
ajs6f: that's where this particular ticket comes to play (fcrepo-1884)
<ajs6f>acoburn: In that case (Resource and FedoraResource) I think you need to make guarantees on the FedoraResource side, certainly, but some people will want to make guarantees on the other side as well. I bet diegopino would, and he's got the semantic backplane to do it with.
<acoburn>ajs6f: because if you refer to the root resource w/o a trailing slash, it isn't considered "in domain" and therefore is stored as an http:// url rather than as info:fedora/11:39
<ajs6f>acoburn: Isn't that just changing the test in some converter class somewhere?11:40
<acoburn>ajs6f: yeah, the fix is really simple (I have it ready, locally)
ajs6f: it just raises these bigger questions about how the converters are used11:41
<ajs6f>acoburn: Well, let's not turn "popping a zit" into "gender-reassignment surgery".11:43
acoburn: I completely agree about the larger questions, but let's tackle that next?
<acoburn>ajs6f: of course. I anticipate it will be an undertaking somewhat on the order of changing RdfStream from an Iterator to a Stream11:44
<ajs6f>acoburn: Yes. Put someting on the agenda for the next meeting?11:46
acoburn: That will give us a chance to digest the type questions in IRC, and we could just give a straight proposal..11:48
<acoburn>ajs6f: sounds good11:51
<ajs6f>acoburn: Rocking. Rocktacular. Rokusaburo Michiba.11:52
<whikloj>ajs6f/acoburn: Can I pick your brains for a second?12:00
<acoburn>whikloj: sure12:01
<whikloj>acoburn: I'm working FCREPO-1944 and the problem comes down to the fact that we can't get the path of a version of an object once it is deleted.
acoburn: But my understanding of Resource vs FedoraResource is a little murky12:02
acoburn: I wanted to use the INACCESSIBLE_RESOURCE you and awoods created for WebAC, but it is not consider inDomain for the repo
<acoburn>whikloj: that's what ajs6f and I have been chatting about ^^^12:03
<whikloj>acoburn: oh ok
* whikloj starts reading
<acoburn>whikloj: the basic idea is that a resource in your repo may refer to other resources via properties. In RDF, those relationships are serialized as URLs12:05
<ajs6f>whikloj: The answer is that no two distinguishable material things in the universe are truly identical. There is no consubstantiality, there is only a moiling puddle of names from which we sometimes splash our faces. Hope that helps.
<acoburn>whikloj: e.g. http://localhost:8080/fcrepo/rest/path/to/resource
whikloj: but internally, it is stored as fedora:info/path/to/resource12:06
whikloj: that way, if the hostname of the repo changes, you don't have to worry about internal relationships
<ajs6f>whikloj: Converters are how you get from one world to the other.12:07
<whikloj>acoburn: ok, so my problem is that that path (fedora:info/path/to/resource) is only on the FedoraResource, so if you delete that resource you can never find that path from any versions of it.
<ajs6f>whikloj: You mean the version has no direct link to the "master" resource?12:08
<whikloj>acoburn: so are you guys discussing a complete refactor of the Converters?
<acoburn>whikloj: yes, but that is going to be a BIG project
<ajs6f>whikloj: Not a two-beer project. More like a whole growler.
<whikloj>ajs6f: I mean that if I delete a child object and then ask for a version of the containing resource from pre-delete I can not get the original info:fedora/path/to/resource12:09
<acoburn>whikloj: I gotta run…
<ajs6f>whikloj: I don't understand: from where are you asking this question? Of what resource?12:10
<whikloj>ajs6f: So the bug is this, create a container, add a binary resource inside it, create a version of the container, delete the binary, ask for the previous version of the container
ajs6f: 40412:11
<ajs6f>whikloj: Why? What is throwing the exception that leads to the 404?
<whikloj>ajs6f: mostly because it tries to display the ChildrenRdfContext of the parent, it has the version.
ajs6f: It uses a Convertor and here: https://goo.gl/hH6pAQ12:12
<ajs6f>whikloj: What is inside the method getUnfrozenResource()?12:13
<whikloj>ajs6f: https://goo.gl/SSHchC
<ajs6f>whikloj: And it can't find the prop jcr:frozenUuid because something has been deleted?12:15
<whikloj>ajs6f: right so it throws the Exception12:16
<ajs6f>whikloj Is there another way to get at that resource? Can you go back to the "master" resource and trace it from there?12:18
<whikloj>ajs6f: "master" to me would be the one we deleted
<ajs6f>whikloj: No, I mean the current live resource. Can you not start there and find the old version?12:19
<whikloj>ajs6f: ok maybe I am misunderstanding, but I am requesting /fcrepo/rest/collection/fcr:versions/v0 which is trying to find the children and generate triples for them here https://goo.gl/DntzCa12:22
<ajs6f>whikloj: Yeah, I'm saying you could back up to /fcrepo/rest/collection and then ask for the old version from that.
Or rather /fcrepo/rest/collection/fcr:versions12:23
<whikloj>ajs6f: but the child object /fcrepo/rest/collection/picture.jpg has already been deleted, so when it tries to recover the Path it can't
ajs6f: So if I do "Prefer return=minimal", then no problem
<ajs6f>Fine, but are you not trying to get the old version of the collection? Are you saying that it can't produce the old version of the collection because a piece is missing?
<whikloj>yes, and I can get an old version of the collection EXCEPT for the children listing which is part of the normal representation12:24
I need to be able to say the child is deleted or store the original path on the Version somehow12:25
<ajs6f>whikloj: This sounds like a bug in our use of the JCR impl of versioning. Here's the question: _was the node that represents the binary resource versioned_?
Like, JCR-versioned, i.e. possessing the mixin jcr:versioned or whatever it is.12:26
<whikloj>ajs6f: Hmm one sec let me see what I get in unfrozenVersion()12:27
* peichman joins
<whikloj>ajs6f: no I have a jcr:frozenNode12:28
<ajs6f>whikloj: I suspect we have managed to create a versioned container with unversioned contents, and that is what is creating this situation.
whikloj: Frozen node on what?
<whikloj> /jcr:system/jcr:versionStorage/16/ef/3f/16ef3f69376bf836be78dfcee30271637251442e/1.0/jcr:frozenNode/archives.jpg/jcr:content {jcr:lastModifiedBy=bypassAdmin, jcr:uuid=87a0a8c317f1e70acffad0-ac16-4c67-a700-7c733c5cfd1f, jcr:mimeType=image/jpeg, jcr:frozenMixinTypes=[fedora:Binary], jcr:frozenPrimaryType=nt:resource, premis:hasSize=82076, jcr:frozenUuid=676b2b4c-2eb2-4670-919f-5d6397694592, ebucore:hasMimeType=image/jpeg, jcr:createdB
y=bypassAdmin, jcr:primaryType=nt:frozenNode, jcr:created=2016-03-09T21:08:06.813-06:00, premis:hasMessageDigest=urn:sha1:c2c899b3315d657698a7f6b203dc51892cb83fbb, jcr:lastModified=2016-03-09T21:08:06.813-06:00, ebucore:filename=, jcr:data=**binary-value-not-shown**}
and the "this" for this instance of FedoraResourceImpl is a FedoraBinaryImpl12:30
* arebenji joins12:31
<ajs6f>whikloj: Okay, cool, but what about the other nodes connected with that bitstream?12:32
whikloj: That's a jcr:content. What about its parent node?12:33
<whikloj>ok one sec I'll see what's there
<ajs6f>whikloj: beware lest the abyss gaze back into you.12:34
<whikloj>ajs6f: too late I had a face-melting moment with this last night
<ajs6f>whikloj: Fedora 4: Why not stab yourself in the eye?12:35
* jcoyne leaves12:44
* jcoyne joins
<whikloj>ajs6f: sorry for the delay had to find bandages for my eye. The container also has a frozenUuid property, it also throws an ItemNotFoundException. Should I keep walking up and seeing if anything exists?12:51
container == archive.jpg
<ajs6f>whikloj: Wait, the archive.jpg resource is the container?>
<whikloj>ajs6f: Hmmm I think so, let me ensure I'm not talking out of the wrong end again12:52
<ajs6f>whikloj: I thought the container was the thing of which archive.jpg is a child.
<whikloj>ajs6f: right, so maybe I did this wrong with a "this" as defined ^^.12:54
ajs6f: I did getSession().getNodeByIdentifier(this.getContainer().getNode().getProperty("jcr:frozenUuid"))
<ajs6f>whikloj: Where was that code? What was 'this' when it was executed? You might want to put in some logging, or you might want to actually use the debugger in Eclipse.12:55
<whikloj>ajs6f: I am using the debugger in Eclipse.
We should probably just recommend that people run their production repos inside a debugger. That would make our lives easier.12:56
* peichman1 joins12:58
<whikloj>ajs6f: okay so the container of the jcr:content above is12:59
also a frozenNode and no versionable mixin types13:00
<ajs6f>whikloj: that makes sense.
whikloj: can you check the node of which that is a frozenNode?
whikloj: repo/some/path/archives.jpg? it should have the mixins.
* peichman leaves13:01
<whikloj>ajs6f: it does but not versionable - jcr:frozenMixinTypes=[fedora:NonRdfSourceDescription,fedora:Resource]
<ajs6f>whikloj: No, I mean the "main" resource, not the frozen one. The frozen one shouldn't have the versionable mixin, but the "main" one should.13:02
<whikloj>ajs6f: right but I still can't do a getNodeByIdentifier() with the frozenUuid, this one also throws the exception13:03
<ajs6f>whikloj: that's okay, that makes sense, it's deleted, right?13:04
<whikloj>ajs6f: yep
ajs6f: maybe we need to be creating versions for all children when we create the version of the container?
<ajs6f>whikloj: so ther question is, what do we want from the resource that is gone, and how can we get it?13:05
whikloj That is what I am thinking about. What does it mean to have unversioned contents of versioined containers?
<whikloj>ajs6f: yep, in my current context we need a FedoraResource to generate the triples13:06
<ajs6f>whikloj: Hm. Hm. how urgent is this? We may want to talk about this on the call. Because a new strategy where we version everything inside anything that is versioned is a big thing.
<whikloj>ajs6f: its a bug and like a lot of them its a major bug13:07
ajs6f: so no rush
<ajs6f>whikloj: Who is waiting on it?
whikloj: :) Fedora 4: Take it easy, speedy.
<whikloj>ajs6f: awoods and Jason Sherman13:08
ajs6f: but I would say being unable to access version information because you removed something might be a bigger issue.
<ajs6f>whikloj: Yeah, I agree. I'm trying to figure out if the right prescription is "Things inside a versioned thing must be versioined." or whether that is a red herring.13:09
<whikloj>ajs6f: from my experience nobody really understands our versioning...so if we want to change it rather than patch it...I'd be okay with that13:10
ajs6f: my other solution was replace the Path with a placeholder, which is not really a fix, but would allow you to get the representation13:11
<ajs6f>whikloj: DOesn't that have to stay around forever then?13:12
<whikloj>ajs6f: yes... or we just replace it with a useless /resourceDeleted/ path
<ajs6f>whikloj: This may be a use case for the tombstone mechanism. You may want to contact escowles for advice about that.13:13
<whikloj>ajs6f++ # That's interesting I wonder what is there?
<ajs6f>whikloj: Well, when you have a lot of tombstones you have a graveyard, I suppose.13:14
<whikloj>ajs6f: I'll ping escowles and see if we can access the tombstone without knowing the path ahead of time13:15
<ajs6f>whikloj++ # Thunderbirds are go!13:16
<whikloj>ajs6f: so just for my sanity (or lack thereof), if I catch that RepositoryException could I check for a "child" at fcr:tombstone?13:17
<ajs6f>whikloj: I honestly do not know. I do not understand the tombstone mech.13:21
<whikloj>ajs6f: Of course if you delete the tombstone then we are back to square 113:23
* jcoyne leaves13:26
<ajs6f>whikloj: Yeah, but at that point you are actively kicking yourself in the crotch. We can only do so much to help you if that's the kind of person you are.13:29
<whikloj>ajs6f: Oh we in CLAW were going to dump all tombstones...so that is a bad idea :)13:31
<ajs6f>whikloj: No, that 's fine. It's the case where you delete the stuff, then delete the tombstone, then try to access it. What are you think if you do that?13:33
<whikloj>ajs6f: yeah, but this is a case of accessing an old version of an existing resource. So I expect to get it back, even if the children aren't there.13:34
ajs6f: I think we version all contained resources of a versioned resource13:35
<ajs6f>whikloj: I think the whole point of our dicsusion about non-versioned inside versioned is that the children are _part_ of the parent, for versioing purposes, and if you delete one, you have deleted _part_ of the parrent and may not be able to get it back.
whikloj: yes, we may have to do that. But I want to talk it over on the call. There may be something we are missing, no?
Humility is the breakfast of champions.13:36
<whikloj>ajs6f: I didn't think about it as part of the parent, but I see your point
ajs6f: yes I'm not pushing forward today...its Friday and above 0 degrees here
<ajs6f>whikloj: This is the thing we are getting into: what does it mean when we use the word "part"? Does it mean in terms of intellectual arrangment, or in terms of state management, or in terms of access policies, or what?13:37
whikloj: It is a little less than 80 deg here.
<whikloj>ajs6f: little jealous13:38
ajs6f: yeah, I guess when I think about versioning a container I assume that deleting parts/children/contents would not affect the past information of that container.13:39
ajs6f: Whether when I restore that version I get the child back is a bigger question.
<ajs6f>whikloj: yeah , i get that, and i don't think you are wrong.13:40
whikloj: i think there are at least two answeers to that, and JCR and Fedora may given different answers.
<whikloj>ajs6f: yeah13:41
<ajs6f>whikloj: leading to CONFUSION..
<whikloj>ajs6f: Fedora 4: leading to CONFUSION...
I like it
<ajs6f>Fedora 4: [HYSTERICAL SCREAMING]13:42
* acoburn leaves13:49
* acoburn joins13:57
* peichman1 leaves14:10
* ajs6f leaves14:38
* peichman joins14:44
* dwilcox leaves14:45
* dwilcox joins14:48
* dwilcox leaves15:03
* acoburn leaves15:09
* ajs6f joins15:28
* jcoyne joins15:29
* jgpawletko leaves16:23
* ajs6f leaves16:39
* ksclarke joins16:59
* arebenji leaves17:01
* peichman leaves17:26
* peichman joins17:33
* peichman1 joins17:34
* peichman1 leaves
* jcoyne leaves17:37
* peichman leaves
* jcoyne joins17:52
* barmintor leaves
* jcoyne leaves17:54
* whikloj leaves18:03
* jcoyne joins20:28
* jcoyne leaves20:40
* ksclarke leaves20:52
* jcoyne joins21:03
* jcoyne leaves21:07
* tjohnson leaves21:24