Good morning, good afternoon, good evening, wherever you're hailing from, welcome to another edition of the OpenShift Container Storage Office Hours. I am Chris Short, executive producer of OpenShift TV. I am joined by the one and only Michelle De Palma from our illustrious storage team. And I'm very happy to have you here. I'm very happy that today's show might actually work out as planned unlike nightingale yesterday. Yeah, we'll see. So, Michelle, please introduce yourself. Hi, Michelle De Palma here. So let's just briefly talk about the last show. Certainly. So we were going to autoscale the new band point and the MCG endpoint. And that did not work out so well. If you remember, we brought the cluster down. Yeah, no, a million pods will do that. In hindsight, it's like, wait, we've done performance test. A million pods is way too much for one cluster. It's like, what were you thinking? Well, at least no one complained. No one in the lab complained. So that's good. So my bad, it turns out that can't do autoscaling with that particular version. It has to be on 4.7. So I thought maybe. So much better when you said that. Right, I'm like, good, because it's not us. So I just wanted to put that out there. Maybe we'll do some sort of preview or something like that in a future show. But that was the reason. And I was like, oh, well, that kind of makes sense because that's kind of what happened. So we're putting that issue aside. And if we do a preview of the new version of something, or we'll go attack that. But today, I wanted to do something happy and successful. It's OK with you. Yes. OK, so I'm sure. Don't get me wrong, we love failure on the channel, right? Like we totally embraced it, but it's always great when something just works. Yes, every once in a while, something should just work. So I have some OCS training. Excuse me, I don't know. Yeah, so this is very. I just want to give you the setup. So let me share my screen and I'll show you what we have because I really, really, really like it. Hang on a second. OK, OK, can you see that? Yes. OK, so a couple of things. I don't know how many people know that we do actually OpenShift does workshops, but the storage team also does workshops. And the workshop is fantastic. This whole setup that you're seeing here is from my team. So a shout out to Anette Clouet and J.C. Lopez and Chris Blum and probably others that I'm not mentioning right now because I just can't remember my team that also helped. So yes, so yeah, like this is an amazing thing. So I didn't actually like do any of this. I'm just showing it to you because it's so awesome. And I I regularly talk to either current customers or potential customers or anybody. Honestly, we're trying to open this up and do more of them. So this is going to when you do the full workshop with us, our part, it's like two hours of quiet work where you really sit down and you just kind of learn and what have you. So I wanted to give you the setup, but I also wanted to tell everyone that it's actually open. Like so these materials are yes, you can do this.  I can make myself smarter. Wow, you can. So good is the question. So it's just this top piece up here. Can we send that out to people? Well, go ahead, feel free. OK, so so a couple of things are going on. Just so you people get the setup here. So I create labs. I created one for the show inside the labs. There are like two links you need to care about. One is the actual, you know, the familiar Openshift console and the other one is the dashboard for our lab. So I'm I'm sorry. So what happens here is you get a you get a terminal and we get to to actually access our lab this way. So it's it's really easy like for anyone who wants to do this. And it's the these pages you see here are a where we actually create them and we PR them and test them. And then eventually they make their way into the actual lab. But they start here. So what's offered to you, the public, is actually slightly more advanced often than what is in the workshop. But we do both like so. I'm not going to point. I'm not going to go through everything in the workshop here. I'm going to do it. I could, but I'm going to try and do it from here and cut and paste a little bit. And just I want to walk you guys through if you look here, this is a table contents here, three, four and five. So we're going to create a new we're going to create an application that's going to use stuff for the volume. Then we're going to do it with stuff of us. And then at the bottom, can you see five here? Is this too small? Let me know if the font is too small. I mean, well, like the table of contents fault font is small, but the majority of it, right? Yeah, if the audience, if you can't see it, let us know, we'll bump it up. Let us know. So the idea here is I want to get through three and four so we can get to five, which is a PVC, cloning and snapshotting. Nice, which is yeah, like it's so that's the stuff kind of important. Kind of got to know how to do it. So I think all of this is there. Let me see. Hang on a second. All right. So again, here's my Openshift console for my lab cluster. Here is the where it's here's my terminal. It's like your your jump host, your Bastion host kind of thing. And these these headings should look very familiar, right? Create a new OCD application to plan and find that stuff. I mean, that comes straight from here. So at this point, I'm set up. This is ready. If we go into it, it's got everything I need. I got my what is it the operator?  Yes, the operators are all done. Well, because I thought about doing it for you, but it's like, you know, you got to wait till it takes a little bit of time. And it's not new. Like I was like, I want the new shiny object. So there we have all of our dashboard set up here. We are ready to go. So I'm starting at the point where OCS is installed. And that is something you would do in training. You would you would actually go. That's what the first three sections are about. But we don't we don't need to do it. So all right. So from here, if you're in my so notice, you can download this yourself. If you wanted to do it on your cluster, everything's available. We really try to put everything out there. But I'm going to create this new app. And then we're just going to start to walk through this this lab. This is a very simple. What is this rails with like a postgres backend and stuff like that? So when I click on this, look, we don't even have typos in our workshop. Because you'd be surprised at how much time you'll spend. Oh, no, I know. I built some of these workshops before. Like I built a workshop on metering and open shifts. I was like, I really like this, but man, it's just hard to code. But yes, you don't allow. So there's no no typo. So obviously not not the real world here. So I'm just clicking through all of these things. We're going to do an O.C. style. So it's it's got it. It's applied, but let's slow down a little bit. Let's make sure we tell people what we're doing here. Right. Like you're creating a new project. Cool. Your database app. You're creating a new app, which is a Rails app, a Rails app. And the whole point of this is so that we can show you what like postgres comes up, it uses an arbitrary volume and we're going to later on clone that. Like it's just to show you how this would flow. So here's the YAML from again. Yep. Oh, yeah, tiny, right? Like you can't even. How's that better? A little bit better, a little more, a little more. OK, I turned 40 last year. I'm sorry. OK, so this is again, part of training, like you can download this. And this is just one of our demo apps. We have a few. There's another one in here is a photo album. Like just just trying to illustrate a point, right? So here we go. I don't even know. Is this from Mr. Blum? I think it is. So here we go. For more information about this template, you can see, can you see that actually is hidden behind? There's all kinds of info here, but we're not going to do anything too exciting with it. It's not it's really just to illustrate all of our features to the training repo and the chat for. Yeah, there's a lot of good stuff there. Like, you know, and certainly general knowledge stuff, right? General knowledge stuff. And and, you know, you could this also later on becomes a unit test for you, right? Deploy this app, make sure the following things work with it. It should, you know, it should work. It's fine. So OK, so that's what's happening here. It got it. We created the new projects down here. We're applying that YAML file I showed you before. We're giving a certain storage class and a certain volume capacity size. That's that's really what's going on here. And now did I check the status? OK, we look good. All right, so let's see that the BBC is created. So so I mean, we could go slower and walk through all the BBC stuff. But at this point, I'm thinking everyone's kind of familiar with BBC's kind of. Well, I mean, I wouldn't assume the audience.  I haven't heard them saying persistent this morning. So if if you're not, you know, clear on what those are, just let us know we can walk through that. OK, so and also in this YAML file up here, like they're they're setting we're sending parameters that are setting certain variables, right? So if we look for storage class and volume capacity in here, it's going to be in here somewhere where it sets it, right? Like you can see, it's setting a bunch of other stuff. What was it? Storage class. Was it underscore? There it is. So we're sending these things here. Right here, it's happening. It's saying I wanted to be created, persistent volume claim created like this. Yeah, Newazer says there's always it's always good to get a refresher. JP Dezza asks you have to have a PV before you have a PVC, right? Well, so hang on. So I'm like all set up, like I come prepared. OK. Right. But the question is, yes, do you need a persistent volume before you can make a claim? So in this set of good. Sorry. So like, yeah, if if if I have a claim and there's no volume there for it to claim something, it'll just sit there and wait, right? Until a persistent volume is created. So yeah, you kind of need to have that persistent volume set up before you can have the claim actually claim something. But you can create the claim before the volume, right? You can, you can. Although right now we're all bound everything. So I kind of came prepared in that sense. We could back up further and start like fresh, fresh. But I was in the interest of time. I had a few things done already. Yeah, no, no worries. People are just trying to figure out, like, is it an egg? But it's actually like chicken and egg, right? Right. So you're going to make a request from the storage cluster. The PVC is going to match and it's going to go off and take care of it for you. And then hang on. So we checked that the PVC is created. It is now this is the stuff that can take a little while. No, I think we're good, actually. How many completed do you see? Do you see four completed to pause running? Yep, no, we're good. Oh, see what happens when we're talking stuff happens. OK, it's good stuff. So this is the right. So it gets the PVC binds and then it brings up the rest, right? So now it's got to it did whatever it was doing with Postgres and what have you. I actually don't know the details about looking at the animal, but I would assume it's setting itself up and doing initialization and things like that. OK, so ideally this. Oh, now I remember what this app does. My bad. This is the articles app. You'll see in a second. OK, this is what happens when you like do it too many times. Maybe matters. Yeah, yes, yes. So, yeah. So, OK, so let's go look at what this application actually did. Ta-da, I went and got to know how to do this. You get to route, you know, what's really useful here. Look, look at Jason. Have a see this is like things, cool things my team does. So I don't have to think about it. Oh, yeah, like, all right, let's go here and actually take a look. Maybe we'll upload some articles. Hang on a second. Ta-da. This is just a very simple. Here we go. All right. And this is I happen to know this. OK, oops. No, that's not right. Is this like part of the workshop? It's in the workshop, but it's OK. Well, and I think I maybe I've got it wrong. There it is here. It's actually literally in the workshop. It'll tell you down here. No, maybe super, super, super secret, secret. Yeah. Yes. So the idea behind this is that is that you you fill in articles and you're going to see you're going to see your objects grow, right? So this is part of it. Again, what I I'm just trying to get to the cloning and stuff like that. So apologies, because I'm like, this is not the exciting part to me. The cloning and the snapshotting is more exciting. Blah, blah, blah, you need to create some data to do. You need to create some data. There it is. You can put comments on it. Maybe we can do another one asking you to save your password, because of course, you want that password, your password. I know, right? Well, that's what I always want. Let's see. And it's hiding. Hang on, I have to move. I have to move your face to get to it to tell it not to say. Oh, heaven's the best. All right. So hang on. So here we are. We've added something. We should probably add even more if we want to see more, but it's OK. Down here. Another one. Why not? I like it with some comments. Yeah, let's just yeah, I'm trying for the, you know, snapshotting. We don't want this thing to be fast. Yeah, no, it's all right. So toolbox again. So let me we skipped one section. You kind of broke up there for a second. Oh, did I wake up on my back? You see me now? You are back. I don't know what happened exactly. I'm sure. I don't know. That was weird. It was like a blip. Yeah. Can you see me? Can you see me? I can hear you. Everything is fine.  It's very weird. Oh, it's weird. You were moving in everything like I checked the streaming rig and everything. Yeah. And it's happening. That would happen. OK, is it better? My connection cut out for a second. Yeah, you're good now. OK, that's weird. I haven't twice. That's not good. It's not going to be that kind of day, Chris. It's not. That's not a sign. I mean, I need to go to make more sacrifices. What? I don't know at the at the altar of the Internet. OK, so, hey, please. They're hard to please. All right. So, all right. So to go back into this toolbox, I'm going to actually add the toolbox hang on. I have to do a patch. You'll see there it. OK. I forgot that this was connected. Oh, hang on, hang on. No, no, no, I want to go up dash dash patch is what I mean. Let's go up. It's toolbox. Is that what I'm looking for? Hang on for the OC patch. Yeah, here it is. Here it is. No, no, this one in particular. This just patches so that we have the the. The stuff toolkit and then I can drop into it. The way I use that. That's really it. So, OK, now I don't want this tool's patch. I want this one. That's not the one I want. I want the other one. This one where we just were. OK, so. PPC's created all of our parts up and running. We've created some articles because we like to here. That's an example output we did. We logged in. All right, hang on a second. So I don't know if you know this, but when we're in the workshop, we typically we're always like proving it's stuff underneath. We go do something or like the change is real. There's smoke and mirrors here. It's actually stuff underneath, but it's it's cute how we kind of we go back and be like, yes, it's that look here, do a DF on it. You can see stuff growing and happening. So if I go back and I yeah, like it and I think it also makes if you have stuff experience, bring it like that. Yeah, all stuff underneath. It's not you're not learning something new in that case. So I did speak to a customer recently where they had a lot of stuff experience. So for them, it was really important to get like their tools. Right. So anyway, so this is seven. If I go and add a bunch more articles, all of this stuff grows and you can see that here. You can see the volume as it's connected to. So that's the point of this section. It's to really just show you like the app is incidental. It's just like this is what's happening underneath. This is how your PVPVC's are being managed. This is how you actually go look at them and see what volume is connected here. Oh, we don't lie. We don't make this stuff up. So here. So now we have two RVVs. If you do the full workshop, you'll see in the beginning that you don't have them. And then as you progress, every time you drop back into the toolbox, you'll see more stuff. So it's again, it's like we go do things in the cluster. We see how it impacts storage and we go into stuff and just take a look. I think in practice, people don't generally need to go down to this level. But in the workshop, we want to make sure that, you know, it's there. So question from Rapscallion Reeves here. Does OCS only work with stuff? Could we use redhead cluster? This is a loaded question. This is a loaded question and I am on the newer side. So I may not be the right person to answer this. To my knowledge, it works for Ceph. Like the OCS operator installs Ceph. It does not give you an option to install any kind of other storage back. Correct. But OCS3.x was cluster. So you cannot be on OpenShift 4.x with an OCS3.x. So going to OpenShift 4 means if you're bringing OCS along, which I hope you are, means changing out of cluster and into OCS Ceph. It was a big, big, big, big shift. Yeah. So does that answer the question? So.  It's OCS is those three upstream projects of Nuva, Ceph, and crap, what was the other one? Rook. Rook, that's right. It's one of the three I always forget. Never fail. And okay, can I do a plug for the next show? Absolutely. Okay, and then our next office hours and two weeks, I wanted to bring on, hopefully someone from the migration team and go through an actual migration from OCS3.x to 4.x, which means we're going to do it in his lab. It has to immediately at least two clusters, but it means actually migrating off of cluster onto Ceph and what that looks like and what tools are available. Yeah, because I think a lot of people have this kind of question, like I'm on this and I, or even the gentleman from the migration toolkit for containers team can talk to like what you need to think about before you migrate. Like all he does is migrations between OCS3.x and 4.x. I thought it'd be useful for people here. Yeah, so, and I'd also question like what, why do you want to stay on cluster? Why not move to Ceph? I'm like... I mean, there's a huge install base, right? Like I would imagine, right? Crap, scaling and reads. I'm assuming you have a lot of cluster hanging around that's why you're asking. So... And migration is not an option or too expensive, too time consuming.  Let us, you know, maybe we can help you out more with that question around scaling and reads. Come for a workshop. Contact me, like let's see if we get your hands dirty, if we can see what is needed from the cluster side or what's important from the cluster side that you would, you know, what's the comparison to the Ceph side, right? Like I'd love to do more direct, you know, it's apples over here, it's oranges over there, that kind of thing and how you get there. Okay, so moving on, because I'm trying to get to, let me get out of this, hang on a second. Trying to get to my clone and hang on a second.  All right, so sometimes I like this because I don't always find it readily, and maybe this is because I've been working with the OCS training docs, but I find like I forget how to do this and I know it's here in training. So I encourage everybody, go look at the training materials, there's some very useful things, like matching your PV to your RBD. Let's say you just need to, something's happened underneath your on-prem or whatever and you need to be able to go from the PV and match it to the RBD, this is how you would do it. And you might find this on, you know, like Stack Overflow, but it's also in OCS training docs. Just had to remember how to do this quickly. I need a mapping, I need to know which particular RBD is having trouble or something along those lines. So, good nuggets of information. Your cluster is, does it have extra attached disks or are you using like local, you know. Me? Yeah, you like. Oh, this is in Amazon. Yeah, so you're pulling in extra disks from, you know, like GB2 or whatever grade disks. Yeah. So Rapskilling is asking about his home lab, essentially. So I'm just gonna answer it in chat. Okay, okay. Yeah, so, you know, obviously for the workshops and stuff they just let us do this. They have a whole setup as you know, and lead. And I never seem to get a bill. So. Yeah, I'm sure I will now, but okay. So anyway. Okay, so here also, if you dissect this, this is how you get the full RBD name. There's a little bit of, well, so here, anyway, let me do this for you so you can have a look at it. So, but if you pull this apart, you can actually see how you're like using part of the name and then you have to strip off some piece. So it's not as straightforward as it seems. So this is a good thing to know. Just to have this in your toolbox about how to pull out the actual full name and pieces to attach to it. So you see how at the very end, there's a print for CSI volume dash, like there are certain things you just need to know about how to map from one to the other. This all exists. I don't know if this kind of information is located elsewhere, but it's definitely in ROCS training and that is totally publicly available to everybody. I think this is a nugget, good nugget of information. You just wanna store that somewhere and say, oh, I do know how to map this volume all the way back. I know I had to get from a PV all the way back to the CSI volume. Wherever you're watching this book market. And it'll be on YouTube forever, by the way. So yeah. Yes, yeah, awesome. So there is a question about the CEP operator itself. Is it using the Rook operator? Does it like pull in the latest Rook operator or are we doing this all ourselves for OCS? No, no, so okay, so that's a good question. Let's go back here for a second. So that person should definitely, or whoever's asked should, we should do like, I skipped the install because we've done install so much, but think of it this way. So you have, here's the world of OpenShift and then inside of OCS, OCS is responsible for two operators, Rook and the other one is Nuba. So Rook is gonna go take care of Ceph and Nuba is gonna go take care of the multi-cloud object gateway instead of that service. So that's how I think it is.   So Ceph would be at the bottom of that tree and it's being managed day one, day two stuff by Rook and Rook in turn is being managed by the OCS operator. Does that make sense? That makes sense to me. Yeah, so it's very easy to set up. Like that's one of the nicest things about it is that you don't do much actually. You can do it from the command line. In fact, another plug for our training, hang that a second note, not there, is it here? CLI based installable. So if you wanted to fully automate it, there you go. There you go, yeah. I always do it through the Web UI but that's because I'm also presenting a lot. But yeah, you can totally do it through other ways but it's really pretty straightforward. Any more questions? Yeah, so there's a lot of questions actually. Oh, okay, okay, so shoot, let's do it. Let's fire away. Is the new version of OCS, does it introduce any features for disaster recovery like real-time block replication between two OCS clusters? Wait, so glad you asked. Yes, absolutely. Okay, so number one, I'm really bad about keeping track of the features and stuff like, so I know it does certain things, what's available for seven, but like, so I just take this with a grain of salt just because I may not have the exact dates right and stuff like that. We do have disaster recovery stuff coming up and I should be able to demo that to you sometimes soon. So I don't have any, well, I guess we don't really show slides here anyway, but the answer is yes. And there are, so we have some PVC cleaning stuff here but there's like a whole conversation around OADP. Have you seen any of that stuff, Chris? OADP? Yeah. A little bit, yeah, not much. So there's, I think the way to think about it is obviously there's like regular, your persistent storage backup, right? And then there's what else you need. It's not sufficient to back up your persistent volumes, you actually have to know something about the apps, their metadata, the cluster itself. So that you kind of grow in how much you're backing up and where you're backing up to. So you grow in size, right? Like are you really just doing, in a previous life, where you are sync persistent volumes off to somewhere else, but then as you get more sophisticated, you realize that's not enough. So OADP does all of that. That's I believe community now. I don't know what's going on there, but I know that OCS is involved because we have different levels of disaster recovery items, but they're not in training yet. So I think I need, give me two weeks or three weeks, oh, four weeks, excuse me, to come up with something to show. It would be, but we do have it. And I'm trying to think, I'm sure there was something sent out about it, but again, I'm like the worst person to ask these questions for, because they just don't remember what's in now and what's not and what have you. But the reason why PDC Clinton's snapshot got into this workshop is because that's what's next, is doing disaster recovery stuff. But definitely think about backing up the namespace, backing up everything you need, not just this data with this Postgres database. What else do you need? Well, you need a bunch of stuff. And as usual, Red Hat's doing like a, it's a platform, right? So it's going to be bring your own backup system, but plug into a platform that allows you to kind of mix and match and configure things as you need. So I will plot an office hour on that. That's definitely a new feature for sure. So, and you know what? If one of my guys is on and wants to send a link towards like the publicly available information, that would be great. I'm sure we have something up about it. So I'm like, I'm never the marketing stuff. I don't know where it is. They're just like, oh, that's cool. So that helped answer the question. It does. And if it didn't, please let me know. So SS Miller says, pretty exciting. I'm really hoping to find a good distributed storage option for my home lab was a little worried about Seth being more complex than I want it to be, but this is changing my mind. And then there's a question about, is there a comparison between the Seth operator and Rancher's Longhorn? And it's more like Rook versus Longhorn, I think is the right comparison there, not necessarily Seth, because that's the backend.  I don't know anything about Longhorn. So that would be an interesting conversation. I'd like to know more. But you know, if you're, essentially it is, use what works best for you, right? Like that's what I try to tell people. Yes, we're Red Hat, we want to sell you OCS, but you know, if you're tinkering around in your home lab, use what's best for you, you know? Don't jump through a thousand hoops. Seth, I think is great as it is just robust and feature rich, right? It's like the best. Yeah, it's feature rich, it's mature, it's like, yeah. It's interesting, because the more I do, more I work with it, the less, I mean, obviously, but it's not as complicated as you think, actually. Like it's, I don't know, maybe that's familiarity, but I'm like, oh, this isn't, I used to feel it was like this big beast and it was like, oh my God, you know, you have to install it, it's like all these parts. And now I'm like, it's really not that big a deal, but I am also working typically with a very uniform hardware, things like that, kind of make it easier.  Like, are you're doing this stuff on your home lab and you're like, okay, seven years. When I'm doing stuff in my home lab, I'm usually struggling through like various, you know, capacity constraints and such. So, you know, like, I'm trying to. So you have that no matter what. Right, like, yeah, if I could, I could somehow just afford like to have some OCS instance out in the cloud somewhere, I would do it, but no. Right, right, you know what, so, okay, so I don't know, but if the team talks about cooking a lot and I always feel like stuff to me is like slow cooking, set it and forget it. That's how it feels, like until I get an alert that I'm out of capacity, I don't really worry about it. It manages itself. It's like a slow cooker, set it and forget it and then you have dinner. All right, did I do, where am I? Am I here? Hang on, hang on, hang on. Where are you? That I totally, okay, so this part here, get the CSI volume, that's a negative information. Don't forget that. Okay, here we're getting more information about the RBD, RBD image. Again, this is all, so you can see what's happening underneath. We're not really doing anything right now. So I don't think it's very interesting to look at it right at this moment, but this is just, it's there. You can see it again, publicly available, good, negative information you're going to need. Okay, here we are expanding on, oh wow, I haven't done this one in a while. All right, so we're gonna go through the steps to expand to PVC, if everybody's interested. Okay, so we're gonna fill it up, here we go. This is literally like, we're just gonna fill it up. This is the fill up your disk command. The fill up. Yes, this is the fill up your disk command in case you ever need it. So we have some similar output. We go on, here we go, blah, blah, blah. Don't you wish your whole world was just click on the arrow? Click on the, yeah. So, so, so wish. All right, example output, it's doing its stuff. So Mummy League says, I am using vanilla Rook operator with Seth in my home lab. It's super easy and stable. So go with those things for, Longhorn was a little bit of a pain when I used it, had some bugs, et cetera, not the best performance, interesting. Okay, thank you, Mummy, for that, appreciate that. Okay, good to know. Yeah, no, I thoroughly love it when the audience engages and helps each other out, right? Like, that's why we're doing this, to help everybody. Okay, did we, so again, I have to move my little, you know, like, oh no, you're up at the top now. Yeah, yeah, it's in the way. Okay, da, da, da, da, da, da, da, da, da, da. Yep, here we go. Fill up. It's full. Is it full? Enough to generate, full-ish, there we go. We just want to make sure we get some alerts and what have you going on. Okay, all right, so here we go. So we're full, and now, so do you want to do this? So just so everybody knows in the workshop, we flip a lot between the console and the command line. I can't think of anything that can't be done from the command line, for the purposes of showing, it's nice to see. We'll go back to the console itself, but you can do this with the command line. The console's kind of like the proof that you did the thing right, kind of do. Yeah, and it, yeah, it looks kind of nice with all this, okay, so. It is very pretty, yes. All right, oh, by the way, we can do an alert. That's all, that's what they're showing here. They're doing this alert. There should be, but hasn't popped up yet. It'll be here soon. Da, da, da, da, yeah, yeah, yeah. Ta-da, the alert system, it works. There it is. Happy alert. Morning. Wait, exactly. Okay, so here we go. Let's do this. Here we go, blah, blah, blah. All right. Okay, let's edit this file. So I dumped it at the PVC. I also do edits on the fly, but we can do it this way either way, whatever makes it happy. Okay, what are we looking for? 5G? All right, yep. So the idea behind this is that you're just gonna expand the PVC, like you go in and actually make it bigger, and then you're gonna watch it actually grow, right? So I don't have capacity constraints in my lab. Like some people do at home, just putting that out there. The same, hey, yeah. Make it 100 gigs, it doesn't matter. Couple of servites, whatever, okay. You know what I need to do is just get like one of those Synology things and just hook it up and let it go, man. Yes, yes, yes, yes. Okay, hang on, let's see. Did I do it right? Did I type, oh, yep. Blah, blah, blah. I applied it, did I apply it? Is that the last thing I did? I did. Yeah, you did, okay. Hang on. Now look, like my font's so big, I have to look back up from my screen here. Are you waiting for volume to be created? This is too, I'm gonna, hang on a second. Let's do that so I can see. Okay, hang on. Here, external expanding. PVC didn't find a public people expanding, waiting for an external controller. We're waiting. I'm gonna check on, just do this the way the lab wants us to do it. See, now nothing's going right. Okay, sorry about that, folks. We're back, little internet hiccups here. Is screen sharing still? Yeah. Do I need to reshare? No, you're good, it's just on the streaming rig. That's where it broke. Okay, so while it was broken, I just looked at the, that PVC again, to show, and what I'm looking for is, my change took up here in the spec, but it actually, it's in the status. So it's happened. So let's see, let's go back to our describe, even though it's really hard to see out of here. Just goes on, yep, yep, yep, yep. This is sample output in over here on this side in this middle column here. Let's do it this way. There you go. That's the easy way to see it. Okay, what are we looking at? Just to level up the audience. Okay, so hang on, hang on. So, right, sorry. We expanded the PVC from five gig to 10. We watched it, waiting for it to expand, and then we verified expansion. So when we did this the first time this was at five gig, it's now at 10 gig. So I didn't do anything to the underlying volume. I just went into the PVC. And what was the command to expand it? Can you just like go up? Well, so it's, you can, there are a couple ways. Yeah, you can do this. You can dump it out and edit the PVC, and then YAML file, and then apply it. Apply it back in. Yeah, I always think, I always thought I did it. Don't I do an edit? Like, right. You could do an OC edit PVC. Yeah, like I think there are a few ways you can do this. So, but whatever, blah, blah, blah. Oh, that's just a client. Sorry, sorry, there it is. So I can do this too if I wanted to, right? So yeah, you can either dump it out as it's on YAML, edit it. Save it to your repo because that's an artifact, and apply it, or you can just straight up edit it in place, if you don't necessarily need the artifact, right? Right, right, right. So, and then, okay, hang on. So this is, and current allocated size can be checked this way, et cetera. So lots of ways to check it, right? I just, you can just go back and just look at the, get the PVC and the information that was right there. So hang on a second. Oh, look, it can be checked this way. It can be checked that way. So it's flexible, so it's good to know. It's very much 10 gigs, okay. It was five times 10. It's definitely 10, okay. All right, so like I said before, we do this here on the command line. You can do it in the console. I'll just show you, I don't think we actually have to do it, but if you want to do it in the console, if you're a console kind of person, you can do it. You can go here to your PVCs and hang on. Let's just do all projects for a second. Here, here's our Postgres one from our My Data Days app. Ta-da-da-da-da-da-da-da-da. Here you go. Where is it? Expand PVC. There it is. Yeah, that's pretty easy. Same thing, same thing. I mean, it's really easy, right? So it falls in line with all of the other kind of stuff we're doing. So I'm not gonna actually change it because you just wanted to show you that we can change it. Oh, notice.  Yeah, you can't shrink them. It's just like the old days with like partitions on like Windows boxes, right? Like it's unshrinkable. Once you expand it, that's what you're stuck with. That's what you're stuck with. You create a new one and point it to that and you need to shrink it, but yeah. Right, exactly. That would be the way you would do a nice cleanup if you had to. So this goes on through all of that. It talks about it. It does the expansion. We don't actually need to do it because we kind of did it. Can I move on to the next section? Do we have any questions? No, but JP Data is asking me if I could expense an OC12 connection to my house. That would be nice. Yes, it would be nice, but sadly I have very few providers where I'm at and getting fiber here would be really, really hard. So yeah. That's a good question though. You can have a whole show about that. I know. Tell me about it. Yeah. So can I move on to CFFS volumes? Let's do it. Let's just go through it. Okay, all right. Okay, so we're gonna do RWX. And again, I don't have an eye on the time, but it would be nice to get to snapshot and stuff like that. So let's just go through it for a second. All right, this should be kind of fast. All right, so here we are moving on again. I'm not typing because I'm just gonna mess up the typing. We're gonna do another app. Do I remember this one? No, no, I don't. Actually, let's see what it's got for us. Oh, the file uploader, sure. Okay, here we go. This is same kind of thing. We create the new project. We apply this, we're here again. Is this one in? No, it's not in our actual training people, but here we have a nice little PHP uploader demo. We'll upload some stuff. You'll see it grow. Oh, that's from Christian Hernandez, yeah. Yeah, yeah, so it's like, it's all in the family. Here we go. Ta-da, like there, we're watching it happen. This just takes a few minutes. Copy, copy, store, sign, yeah. Copy, store, store, here we go. Something similar over here. Okay, we're just gonna wait so it kind of doesn't spang. Watching paint track. But no, it's actually better than watching paint track. People are asking me if I could get like a dedicated connection here and it's like. Well, no. Well, I could, but I don't know if we're, Have you explored, have you explored all your options? Like this one? I have literally explored all my options. Once we get past this current like business level setup, it is like I need to buy routers and firewalls and all kinds of like ubiquity, expensive type stuff. And. Yeah, like a cooling cabinet? Yeah, exactly, right? Like I would need to rack and everything. And I'm not going to do that until I have a place to put it. And my basement is being finished right now, which is why I'm in this office, which is probably why I'm having, you know, the internet hiccup to begin with. Even though I'm hardwired, I'm hardwired across a few hops down to the basement around the Horner, the grandma's house kind of deal. But it's, it's just, you know, I've, it's really weird. Like if I get a slight internet blip here in the office, for whatever reason on the streaming rig, the zoom goes on. Like it's still streaming, but zoom just cuts off. And it's like, why, why would my internet connection affect another computer in a data center somewhere? I don't know. It's weird, but whatever. Something to troubleshoot for sure. Something to, okay. All right. So let me, I'm just going to get through this, actually, if you have a show on that, let me know. Cause I'd like to know how you, how you have it. My current setup. Okay. So we're just, honestly all we're doing here is setting up the rest of the file loader stuff, right? So I'm going to, here we go. What do we do? We expose the service and we're, we're scaling it up. And then we're going to watch it for a second. This is to me, this is just set up. So hang on. We wait again for the paint to dry. Yeah. You could do a watch on that if you wanted, but. I can't do it. I'm lazy. I'll just, I want to, let's see what's happening next. Okay. To be followed. Never attempt to store persistent data in a pod. This is very, like this warning right here is very shale-yant. Don't put persistent data in a pod. Why? Because when the pod goes away, so does the data. So it reminded me of like, right. But it also reminds me like that. Never put anything smaller than your elbow in your ear. Did you, did you grow up with that one? No. No, also. Smaller than your elbow. That is good advice. Never put the store persistent data in a pod. I was not one of those kids that had problems sticking stuff in their ear, but yeah. I'll keep that in mind for the five year old running around right now. This is a good warning right there. Okay. This is why we have persistent data. Okay. All running. Here we go. Okay. So you can create a persistent bind claim and attach it into the application with the OCD set volume command. So you're kind of just seeing us do things differently. These are all the, these are just different approaches, right? So, but again, it's the same thing. We're setting up an app where it's going to have a PVC and then we're going to watch things happen with storage. That's really what's happening on the underside here. So if you want, we can look more closely here. We give it a name. We give it the claim mode. Like we're just filling in all the options for the PVC right there on the command line. That's why I'm going to do it, right? As opposed to sticking it in a file, applying it, whatever, whatever your preference is. So we are bound and we're bound to the stuff of the storage class. Okay. Cool. That makes me happy. All right. So the things to notice, you're going to notice the access mode is RWX. The first, the other one was RWO and we're just sort of, this is taking you through the paces of the different access modes and capacity, right? So that's what your storage classes are kind of all about. Like, so your, your, your PVC, actually I keep this in my head because it's a nice analogy. When you think about PVs and PVCs and then up to storage classes, it's similar to, and you can make this a better analogy if you have something. So nodes and PVs are similar, right? And then the way you would want to request them, like on this side for a pod, you would have like memory and CPU, but for a PVC, you're going to talk access mode and capacity, but then up from that, you know, in storage, you have more requirements than that. You want, you may want it to be on a particular type of storage class that you've set up that's got like A, B, and C in this storage class as are, you know, is cheaper or something like that. And this one's not as cheap and much faster or whatever your other additional constraints are. It's not sufficient to say, I need this size and I need it to be in this access mode. You know, you need, you need to claim more information about it and that's where the storage classes come in. So this is, these two exercises are really just about working with them and what, you know, okay, you're going to do Postgres. So it's going to be RwO and this is Y and then you're going to do, many are going to read, so you can do RWX, blah, blah, blah. That's it. So it's nice, it's useful and it's available. Okay, here's the route to this. Any questions before I go look at this? This one's on. Like chat went quiet after we had our blitz and that's the little concerning. Maybe we lost them all. Oh no. Well, no, the stream was still going but it was just dark for a second. So. Okay. Hang on. All right. And then we have the file uploader. Da da da da da da da. Okay, where does this come from? Oh, here's something. This is from your app. Yes, so I'm sorry, my bad. Here, look here's the route. So it was a little PHP file uploader. We set it all up. It's got its for PVC, it's got its PV, it's happy. Let's go look at it. So we got the route to it just right down here and want to upload something. Let's go up with something. just to see. I'll choose something. Oh, this was some sort of bird of prey that was across the street. All kinds of interesting stuff. So we can list the uploaded files. You'll see it there, etc, etc. Just to show you. What bird is that? I don't know, but he's not afraid of us. Clearly. Yeah. It was eating a frozen squirrel. Definitely bird of prey big. Okay. Sorry. Hope your kids aren't watching, folks. It was really shocking. I was about to say, wow, that's crazy. The wilderness is moving in. Yeah, like, we don't see stuff like that here in the States. Just saying. I'm joking. I don't know. I'm sure there happens in the North and South to go to all the time, but I'm here in Michigan. That's the first. Anyway, so again, it's just to show you that this is how with this kind of app and this kind of access mode, this is how this would look. This is how this would flow. This is how you expand the PVC on it. Here we go. It's currently one the size of this PVC is one gig. Did I click it? I clicked it. Okay. We patched it. So again, another way. So we've seen it. We can edit the PVC directly. We can dump it out to a file to edit it and apply it. We can go into the web console under storage persistent volume claims and expand it. Or we can do something like this where we patched the PVC. It's all the same thing. Just lots of different ways to do it. So you can imagine doing something like this. If you needed to automate something based on an alert, you want to make sure the claim grows when you reach a certain percentage or threshold or something. This is along the lines of what you would do. So handy dandy stuff. Five gig. So we grew. We were one gig. We grew to five gig here. Capacity here was one gig. We're now five gig. That's also, I mean, it has, it's better when you do it. So I encourage everyone to kind of reach out and come do a workshop and take your time and go through it. There we go. What is this? Let's see. Repeat both commands until output files are identical. Ours are identical. They've caught up already. And reducing the size of the stuff PVC is not supported. Don't, you can shrink basically. All right. Do we have time to do Yeah, we got 12 minutes. Okay. Okay. 12 minutes. Let's do it. All right. I'm not going to read all of this because we only have 12 minutes, but let's get right into PVC claims. So I don't know if you noticed back here. Where was it? Postgres down here. We're on persistent volume claims looking at Postgres. Look at that. Create snapshot. Clone PVC. It doesn't get that much easier. Wow. Yeah, it's there. If you want to do it that way, you can. I want to follow the workshop, but just so you know, in case we don't actually get to that piece. Okay. So you're okay. Let me just follow exactly what Okay. We already created the PVC for Postgres SQL. That's done and we expanded it. That was just expanded to 15 gig. I think we actually extended it to only 10, but that's okay. Make sure you've done that section. We did that section. So this was section three. Actually, we've already done that, right? So we have our volume. We have our PVC. We have an app that uses it. So here we go. Yep. It's called Postgres. Here we go. Before creating the PVC client, make sure to create and save at least one new article. So there is new data. All right. So let's go back to that. Let's see. That was not there. Not there. Not there. Not there. No, no, no, no, no. That's not it. Hang on a second. I am again going to move this. Tada. Okay. Do we want to do? Let's see. New article. Access to blah, blah, blah, blah. We put in something new. We're happy with that. Okay. Done. We did this piece before we creating the PVC client. Make sure to create and save at least one new article. We did that. Okay. So that's the route. We don't need to do that because I just went to it and I put in something new. Okay. We did all that before. They're just walking through it in case you need it. All right. To protect the data, the articles in this PVC will now clone this PVC. All right. So we can do it from the console. We can do it through the YAML. Let's do it through the YAML. I like that you choose the YAML route. Well, yeah, I think, you know, and that one's going to be pretty clear. Like, yeah. Right. Like it's changing a number, right? Okay. Yeah. Yeah. So we go through blah, blah, blah. Reminder just popped up on your screen, by the way. Probably for some. Okay. Thank you. Sorry. I just didn't want that to be there for everybody else to see. Thank you. I appreciate it. Okay. Now create the clone. So the shows, let me just make sure I do don't screw this up. Hang on a second. Are you doing the same operation in the... Or are we creating a resource via YAML file? Does she want us to cut? No, we're not copying this. Hang on. And by the claim, cloning PVC, the size... Okay. The size is grayed out. All right. All right. Let me... Okay. Fine. I'll deal with this way. No, no, no. That way I won't screw it up. Go back. Go back. Scroll down. Okay. Okay. It was there. I saw it. Now create a PVC for postgres. Yeah. Create that clone. Hold on. But this does... Does this exist? Let's make sure that file is there. Yes. Okay. There we go. All right. You want to look at it? Let's look at that file real quick. Yeah. Yeah. Let's look at the file. Okay. Okay. Oh, okay. So it is... I mean, it's pretty simple. It is. And it is... We didn't do 15, though. I think let's do... Let's change that to 10 to what we had. It's going to be the same size. When we did it, I think I only did 10. We can check. But let's just do it. Gotta break something. Come on. We only have... Yeah, let's slowly break something. Okay. It's created. All right. Now check to see there's a new PVC. Okay. Cool. All right. Rep clone. Nothing new happening there. And you can also check the new clone. Okay. Wow. Was that it? Let's go look at the web console. That's really kind of it. Yeah. Wow. I thought we'd have like more... Okay. So hang on. We're going to search by postgres? Yep. Ta-da. Main and your clone. That was a little easy. What's weird is there's no usage being reported. How does that use data part? No, no, no. It's coming. Okay. It's coming. All right. Or did we have... Did we do all we were supposed to do? I think we did. You're... Oh, so then we do... But now it's talking about recovery. So look at this. It's not interesting. So there's none here either. You look at this image. That is interesting. Going on there. Yeah. Hit refresh. Okay. Weird. I wonder if you have to do another right for it to kick in or something. Maybe. I don't know. That is interesting. I'll go bug someone. Is the clone synced automatically? That's what we're trying to figure out, I think. Well, so yeah. And also why wouldn't it show usage, right? And it should match, right? It should match. That's a good question. Yeah. Let me ask about that. We'll take that one back. So we go... This goes on and actually... Okay. So like... Yeah. No wonder. So in the rest of this, if we have time, we actually... I think we scale down the app, drop the original PVC and put the clone in its place, and then bring it back up or something along those lines. So let's see what we do here. Okay. So we're going to corrupt the database. We get to corrupt something that makes me happy. Following command. All right. It's going to print out the tables. It's going to delete some article tables. Okay. And after... Okay. We're ready. Corruption happening. Make it happen. Now. Okay. This is fun. We broke something. Good. Okay. Now, back to the browser tab where you created your article using this link. Okay. So back in my browser tab and... All right. So let's see the error. Yes. Perfect. It's good when it's planned, right? When these things... Sometimes we're planning... Okay. Remember, the PVC clone is an exact duplicate of the original PVC at the time the clone was created. So... Okay. So therefore, you can use Postgres clone to cover the data application. For this, you need to scale down to zero. Right? So we scale down. We're happy. We verify the pod's gone. Yep. Wait. We're waiting. Hang on. So we corrupted the PV. We corrupted the database. We scale... We already had a clone. We made our clone, corrupted the original. We're waiting for this to come down. It's now down. We've scaled it down. And then we work our magic here. Okay. So now we have no result. Right? This is true. You now need to patch the deployment for Postgres and modify to use the Postgres clone. So basically, we're going to change the PVC to now say go use the clone. Don't use the original anymore. Okay. So let's just take a moment to look at this. Okay. So... I did just look it up in the docs for what is happening. Okay. It is CSI volume clone. So just for folks just to let people know. You looked up the usage for it? It does using the... Well, I looked at not... No, I just looked at the docs to figure out how it was doing it. So it is using, you know, the CSI volume cloning process as was asked in chat. So, yeah. Well, why wouldn't you show these? Okay. I'll just find out. All right. So here we go. So we're going to do this. Here's the switch, right? Here's the patch, right? Happening right now. It's patched. Okay. You want to dissect this a little bit more? We're just going in and changing, replacing the... So in the previously, this path would have just had a value of, I think, just Postgres, right? That's what that original PVC was called. We're literally changing the name of it. That's all that's happening, because we've already done our clone and we're already happy. Okay. So now we're going to scale the back up. And then we're going to watch it. Give it a second. Okay. So we go back to here and we should... It worked. So, I mean, in a way, this was a lot. Like each one of these, you could really spend more time with it. I just wanted to show that this is... It's there. These training docs are out there.  Did you lose me? Am I still on? No, you're still here. Okay. Because I got... You know, like when the thingy comes down, I'm like, there's something happening. Anyway, so I'm just trying to... This is like a teaser, really. I'm trying to show people like, hey, you can go do this yourself. You can certainly contact us and we can do a workshop. You can kind of get in there and try things out. Can you drop the link to the training? Absolutely. I'll start up at the top. There's plenty more in here. I just showed kind of like the highlights of what CS4 was like, but tons and I don't mean to look at the other stuff too. Hang on a second. Let me get to my chat. Are there any questions? Are there any questions? That is a good question. I mean, there was a question about CSI native cloning. I think we answered that. Let me know if that doc isn't good enough for you. Also, the training gets updated as things come on. Yeah, it's constantly being updated. Yeah. Yeah. Yeah. That's good stuff. And if you have... We're always open to ideas for new things. Like if there's something you really want to see in training, by all means, let us know. Yeah. If there's some example or something, absolutely. Yeah. Feel free to reach out to me, cshort, at redhat.com. I'm going to try and get a different alias for just easiness. But yeah, we'll see how that goes. Okay. How much can I do the shameless plug here? So... Shamelessly plug away. You have an entire minute. Okay. So this minute, just so you know, I recently worked on Section 7. So I'm interested in people seeing that it uses a new photo album demo created by a wonderful teammate. And it's just, you know, there's tons of stuff in here. You want to add more storage to your stuff cluster. It's all there for you. It should just be something you guys use. And suggestions and more topics are always welcome. So next time I would like to... I'm going to try and get this migration going. I'd like to do a live migration so people can see what it looks like to come off of Gluster and to start using stuff and see what kind of tools we have. Yeah. That sounds awesome. Hopefully someone from the MTC team can join us. Yeah. Awesome. Thank you everybody for joining us. Up next on the channel at noon Eastern, what is UTC 16? No, 1700 UTC is Dev Nation, the show. Check it out. It's my buddy, Sebi. He loves to do some shenanigans and some open shifts. So yeah, it's a pretty fun show. So yeah, stick around for that. And until next time, thank you, Michelle. Thank you to the audience for engaging and asking questions. And you know, if you need anything, I am at Chris short on Twitter with two S's and see short at redhead.com. And I can get your questions answered as best I can. And without further ado, that is all we have for today. Thank you, Michelle. This is great. Thank you. Have a good one, everybody. Take it easy.


of the soldier. Let me go ahead and check. Okay, Bill. No sound. Stay with me. There's another story that hasn't been told. The story of the greatest battle our boys will face. Here at home? They're the wounded in their first home front battle. That's a tough one, all right. Yes. Ninety percent of our wounded consider the return home the biggest battle of all. Do you want me to? We want you to visit these boys at the Mitchell Field Hospital Base and get us a story. Find out what they're up against. Sounds like a real assignment. It is. That story ought to help those boys to win the battle of facing their families. Yes, and maybe show the American people how they can help. I'm Nurse Jane Gray. I'm glad to know you, Miss Gray. Before you go in, there's some things you must know. Yes, I was going to ask you. Don't stare at the boys and don't ask them about their wounds. Oh, I understand. It's all right to be sympathetic, but don't be intense about it. You can't think of what to say, just say how you're doing or something like that. Just watch me and you'll be all right. Okay? Okay. Here we go. Joan Younger of the United Press. Oh, Joan. I know yourself. Joan, meet Al Riser, the best commander on Normandy. He wants to ask you a question. Now, how did you know that? Well, you won't believe me. Maybe you believe her. What's on your mind, Al? Well, I'll give it to you straight. Okay. My leg is paralyzed. Will I be able to dance someday? Well, sure you will. I knew it. I knew it. Just like the nurse. What do you mean? How can I dance again when I never have danced in my life?  Well, come around to see the girls at United Press. We'll change your mind. Maybe I will. You know, I don't want to go home. But why? Oh, Mom will fix breakfast for me in bed. Sis will tip toe around. Gee, I won't have any fun at all. I don't want to be pampered.  I think you're making a mistake, Al. I'll tell you what.  Why tell your brother-in-law first? Well, he can tell Sis about me, and then she can tell Ma. It's kind of tough on the folks at home, you know? I don't like to tell Ma because boy, she sure can't cry. Think it over, Al. Let me know what you want to do. Okay, nurse. Thanks, Joan, for coming around. Sure, Al. I'll be seeing you again soon. Nurse Jane Gray was an angel. The boy's actions were only too familiar to her. There is no way she can prepare any of their families for the bad news. War Department communications state merely that the boy has been wounded in action. It's left to the soldier himself to give the details. Those who can walk on crutches or in casts telephone as soon as they arrive by hospital plane from England. They call their mothers first, but they rarely mention their wounds. They just say. Sure. Sure, I'm fine, Ma. Honest I am. Don't cry, Ma. Please don't cry. Later, those who are married call their wives and attempt to explain what is wrong with them in a general way. I'm home, honey. It's gonna be a tough year ahead, but don't worry. I'll be as good as new someday. Soldiers who are critically wounded usually try to break off their engagements. Nurse Jane Gray always encourages them to think it over for a few days before making up their minds. The blind, the disfigured, the voiceless, and the deaf are handled the most gently. Many of these gallant boys will need long-term expert care before they are capable of facing their family. Well, Joan, you met just about all the boys except one. Who's that? A boy named Bill Williams. Bill Williams? He was out on patrol one night in Norman Bay. All right, men. Keep down. Watch the landmines. Let's go, boys. Stick with me, Sam. Right behind you, boys. That's the past lands. Let me go ahead and check. Okay, Bill. Don't go on with him. No, Sam. Stay with me. He's giving us the okay. Let's go. Come on. Bill lost a leg. They brought him in yesterday by plane from England. Poor boy. I've been trying to get him to call his girl. First he says he will, then he changes his mind. Where is he? Over there by the wall. Don't look now. Would you go over and see what you can do? Well, I don't know that I'll be much used, but I'll try. This is Joan Younger of the United Press. Hello. Hello, Bill. Bill, Joan wants to... I know, I know. You want me to call my girl. Don't you think you owe it to her, Bill? After all, you promised the nurse. I've changed my mind. I just can't talk to her. You promised me, Bill. You said you'd call today. What's the use? I... I've no good to her now. Bill Williams, you're talking through your hat and you know it. I'm just trying to be fair. Fair? Was that a way to treat a girl who loves you, Bill? A girl who's been waiting for you? Are you going to let her down now? Well, are you? All right. Hand me the phone. Bill Williams took the telephone. His hands were shaking. The men around him gave him the only privacy possible. They ignored him. When the call was put through, Bill turned to me. I won't tell her about my leg. I'll just tell her I don't love her. Give her a chance, Bill. Give her a chance. When he started to talk, his voice was so weak that we had to start over again. Hello. Hello, Amy. I'm home, Amy. They brought me home in a plane. Are you all right? Sure. Sure, I'm fine. Honestly, I'm fine, but look, Amy, I... I lost my leg. Oh, Bill, is that all? Is that all? Look, Amy, we'll talk about our engagement later when I get to a hospital near a home. Amy, you don't know what I'm just saying. Honest, I won't hold you to any promises. I'll be coming home soon. What did I tell you, Bill? Was Joan younger, right? Oh, gosh. Amy was wonderful. You know what she said, Joan? What? She said, why didn't I ask the doctor for an artificial leg? Boy, is she brave.  We of the United Press hope that my visit has served its purpose. Hope that you will make their home front battle as easy as possible. Remember that with your help, the battle is more than one. Before I left the hospital, Bill Williams told me something I think all of you should know. He said, I wish every man, woman, and even children could be made to walk through a hospital of wounded and see what it's like. Maybe then there wouldn't be any wars. Ever. Finger's dramatic story of the return of the soldier. United Press correspondents cover the world here at home and all the world battle fronts. We will present another in this series, Soldiers of the Press soon. Be sure to listen. Meanwhile, remember to listen for United Press news on the air. Look for United Press dispatches in your favorite newspaper. They are your guarantee of the world's best coverage of the world's biggest news.


Welcome folks. This is Tom O'Brien of TFNN. We've got five days a week. We've got seven hours a day. We go 24 hours a day on the internet at TFNN.com. Always remember folks, whatever you think about, you bring about, whatever your focus on grows. Hope everyone's having a great day, safe day. Make a great week, folks. Don't take anything personally. Transform your life. When you refuse to take things personally, you avoid many upsets in your life. You have feelings of anger, jealousy, and even sadness will simply disappear if you don't take them personally. Knock it wise. Let's take a look at it out here. We have the Dow Industrial's up 31, Nasdaq down 39. S&P's off 2.5. Gold. Gold contract up $8.70. Trade name, $19.99. We have the silver market up $0.14. $25.42. Lightsweep crude up $0.89. $78.76. A barrel, notes and bonds. A 10-year note. Up 12. 6. Trade in 1.14. 27. The 30-year up 27. Ticks at 1.30. 24. And $king dollar. $king dollar's down 453. Ticks trade in 101. 369. The euro's at 110. The yen is at 134. And the British pound is at 124. The one U.S. dollar. Our phone number's<PHONE_NUMBER>. Give us a call, folks. One note's going on in your world. And the world of the S&Ps, let's take a look at it. And what do you have? Well, let's bring the future up first. So you got a small consolidation out here. We take a look at this. You don't have a high volume low.  This thing's sticking out here. And that's the consolidation. It's a small consolidation. That's the bottom line. We'll see how this baby shakes out. It doesn't seem to have enough juice to get back up and over this 41.52. A 57. 41.57. It's going to test it right now. We'll see if it can get any juice to get it. So bottom line, you got to sell it right off the bat. There's no doubt about that. The first seller came in about quarter past 10. That's big volumes down on the way down. It was 61,000 on the way down. As you're going back up was the 29,000. This bar is coming into it with 17,000. Yeah, and you only get a minute left. So we'll see how that baby shakes out. The thing that's intriguing out here today, folks, is this. Is that the dollar. You know, we've been going tick for tick for the dollar and the S&P. And the bottom line is that that changed intraday out here today because you can see what happened. They're still selling the dollar all the way down. We're almost at the lows of the day. 101.332 is the low of the day. And the market hasn't been able to basically get any traction. So we'll see where that shakes out. You know, you're coming into, well, not strength of the dollar, but where the dollar took off from at the low that was established out here in January. That number is the 101.546. We hit 101. Well, we're at 101.332. So the bottom line is that, you know, you're under that number. So we'll see how this shakes out. Gold goes the same way, man. Gold coming into the downdraft. We take a look at this intraday, what you're going to see from three days ago. Yeah, three days ago. You're going to see, you're coming right into that big downdraft. And that downdraft has 13,000 contracts. And all the contract value on the way up, the biggest one we have is 2,700 kind of going to that. So that's going to take a while to basically eat through that area. We go into the queues. We take a look at the queues. Same set up in the queues. There's a very large contraction of volume today, folks. And there's not a reason for it. I mean, this is not summertime trade, man.  This is the biggest earnings week in the S&P 500. So there's not a reason for it. That being said, you know, if the queues can't close today over that 317.40, which we've already been over it, but it gave it up, that's a heads up big time that you're going to go south. We have 33 million shares out here. You're going into 59 million from Friday. If we take a look at this, you're going to see it's coming... This is just having a tough time coming into the downdraft from this morning. The first leg up had 750,000 shares coming into the 1.3 million. This leg here... Yeah, this is still on. No, this just started. The leg before it had 450,000 going into 700. Yeah, going into that big number, that 1.3 million shares. So I suspect it's going to have a tough time getting through that. We then take a look at the leaders inside the NVX 100. You've got Zoom is up 3%. You've got... What is this? Baker Hughes is up 2%. Fang, which is Diamondback Energy is up 1.8%. Taken away from it, Pindu Odu is off 4.5%. You've got JD off 2.8%. Microns off 2.5%. Inside the downdustrials, we take a look at the strength versus the weakness inside the dow. Point wise out here, you have United Health putting 33 positive points. Goldman 22, Chevron 20. Taken away from it, Microsoft. Minus 27. You've got Salesforce minus 25. You've got American Express minus 18. If we go in the note and bond market, this one's going to get intriguing now because you don't have enough juice. There's not enough volume here, but it's holding up in price. You only got 713,000 contracts. But bottom line, this wants to go for the highs again. And also, we have the higher price, lower yield. Right now, the 10-year is yielding at 3.5%. Last three months, the low's been 3.3%. The high's been 4%. Let me just see what this is, how we've done this for a year yet. Look at the year. It's still 2. So the year is 2.5% to 4.2%. Check that out, right? And 6 months is 3.3%. They're all getting closer now. So six months, we've been up here for a while. We're at 3.5%. And last six months, the low's been 3.3%, the high 4.2%. So in one way, you look at it with 7.10% lower. And another way, you can look at it with 2.10% higher. It's going to be, and by the way, what's going on with the shot end of the curve, the monostart positions are huge, absolutely huge. We'll see which way that wants to go. Some of the higher volume equities out here, and this is going to be a low volume market. And we'll see what they can, oh, First Republic. This is going to be often after the close out here today, folks. First Republic, that's the, you know, they haven't been able to find someone for that yet, but they're going to be coming out with their numbers after the close. That's trading $15.71. Stay right there, folks, we'll come right back. We have the now industrials trading up 58. NASDAQ is down 36, S&P's up one and a half. Stay right there, come back with our mammoth for Steve Rhodes, folks. Currencies, commodities, and bond markets are as important as ever right now with how they're driving the volatility in equity markets across the globe, which is why it's a great time to try out Teddy Kegstad's Tiger Forex report. Teddy Kegstad breaks down the Forex markets every Monday using his 30-plus years of experience as a trading veteran of futures, forex, stocks, and options. Teddy releases his weekly Tiger Forex report every Monday morning with coverage of all the major currency pairs, including the dollar index, the euro dollar, pound dollar, dollar Swiss, dollar Yen, as well as many more.


And what is that we use it? Our course is building the first artificial intelligence that understands code. And the first step to this is analyzing all online open source. We are currently analyzing 70 million repositories. That's every repository on GitHub that is not a fork. And we are now creating a new pipeline to analyze more than 60 million repositories. So that includes all GitHub forks, but also GitHub repositories hosted everywhere else. So this is a test that requires an intensive use of Git. So our first problem was choosing a Git implementation. The usual choices are the Git command line interface, or Libit 2, which is a library that has bindings for many languages. And JGit, which is also a very nice library in Java by Google. But the language of choice has sort this goal. So none of these as they are fit our stack nicely. So when we started our choosing goal where Git to go, which are the shell bindings for LibGit, which are really complete. But it requires a goal. It's not that nice for us. And it's not possible for us to extend it in the way we need it from Go. So that was kind of discarded. There's also some nice command line interface wrappers. They work really fast because, well, it just takes a good Git. The official Git implementation is awesome. It's really fast. But they are very inflectable. We can extend the underlying Git behavior. And there were a lot of Go implementations. But most of them were abandoned just at the very early stage. Because I guess that a lot of people start a Git implementation but then figures out it's actually much bigger than what he thinks. So our choice was doing it from scratch. That's how Go Git was born. So we wrote the full implementation in Go with idiomatic API for both high and low level. In Git technology that's known as plumbing and porcelain commands. And we have a focus on extensibility. We'll talk more about that later. So we are to be compatible feature-wise with LibGit 2 and LibGit. We are still not there. But we are working towards it. We have already put two years of development into it. So we are on track. So why do we want to extend... Why do we focus on extensibility? One of the first things that we need to extend is storage backends. Storage backends in Go Git define how Git objects, references, configuration and so on are stored. So we provide two implementations with Go Git itself. One is just in memory storage backend that you can use for testing or also for processing repositories really fast if they fit in memory. And then a virtual file system implementation that uses a virtual file system abstraction. The open source is you can check in this Go Billy. But you don't plug it around. In fact, we have implementations that use databases as Cassandra as a backend. We have implementations that are storage backing wrappers for doing Gatsy. So there are a lot of possibilities to this. Another interesting extension point is our work piece as virtual file systems. So you are not limited to take out a commit into the disk. You can check out in memory or database or anywhere that you implement a virtual file system interface. And we can also plug transports. So we implement all standard Git transports, SSH, HTTPS and so on. But we can also plug our own. We actually use it for performance use in some cases. So let's go through our use case. The first building block for analyzing all repositories online is having a local copy of every repository in our cluster. So we can proceed faster and on demand. So we are fetching repositories from GitHub, GitHub, Bitbacke, Samana, self-host repositories that are all from Google. We are trying to be very extensive here. But this leads to the first problem, which is folk redundancy. The vast majority of repositories that you find online are forks. In fact, in GitHub, there are like 70 million repositories that are like 60 million if you add forks. So if we store master branch or the master branch of all it have known forks, we get around 72 bytes. If we add forks to that, we have 240 terabytes. That's only the master branch, so this is a lower bound. But most of the data is just redundant. Most forks are just a copy of the original repository plus a couple of commits. So if blue represents forks, we don't really want to store all of those copies that are 90% redundant data. They just take too much space in our cluster for nothing. So we call it by looking forks just as a namespace set of references of the original repository. So for us, we can see the forks. It's just the same as the original repository, but it just has some branches that are pointing to a different part of the history. So we store all the forks of the same repository together in the same log repository in our storage. So these are all objects. If a commit or a file is present in multiple forks of the same repository, that commit, that file is not stored twice. We super fix each reference or branch with the idea of the repository that it was fetched from, so we can still distinguish between them. Let's see an example. Let's say that this is the history of the go-get repository. The real one is actually longer, but we have three comets here. And we have a couple of forks, and they just share most of their history with the original repository, and they just add a commit, probably for doing a full request. So if we store them together, it just looks like this. A single repository, three branches, and we prefix each branch with the original repository so we can still distinguish. But there's still a problem. So how do we say that the repository we fetch is a fork from another? We could rely on name, but there are forks that have different names that original repositories, and there are repositories that have the same name and are completely independent. For example, there are five repositories that are called go-git, and they are completely unrelated to implementations. We could rely also on the GitHub API, but that works only on GitHub, of course. And even on GitHub, it only works if you created a fork using the GitHub web interface. So that's going to fly for us. What we do is take advantage of the fact that a fork starts at the same set of initial commits as the original repository. So it might have longer history, it might have more branches, but if you go to the first commit that was done to the repository, the hash of that commit is actually the same for all forks. So in our local storage, we don't store a repository by removing the name of the repository, but we create a repository for each hash of the initial commit that we saw. And then we fetch a repository, we push each branch to a local repository that corresponds to the hash of its initial commit. So this works nicely across all Git providers because just relies on Git and not in any realistic or any external API. So this is actually how our local storage looks like. We don't store forks, we just store their incremental parts, and we merge together, see if these threads are forks from the same repository. We just store one of them containing the information of all of them. So then we reduce the required storage to minimum, but still have access to all information. The next problem for building this mirror and using it for analyzing is that it's where the whisper rate. So we need a storage that is oriented to batch repository analysis. So when we open our repository, we open it for analyzing the whole history. In our use cases, it's unlikely that we want to open a repository to add just a commit. So we distributed file system for this. We have used ADFS and Google Cloud Storage. The good thing about these file systems is that they have really high throughput. They have the counterpart, they have high latency. And Git repository is composed of many files. If you look into the .git directory of your repository, you will see one or more files. You will see index files, reference files. You will see a config file. So we want to analyze our repository, we need all of that. But in some cases, the time that we spend, the latency of accessing all of these files adds up. At some point, for some repositories, we spend more time just waiting for input operations to start rather than the actual data transfer. And this gets worse every time we update the repositories because every time we pull, we get more files. So this is performance care that just gets worse over time. So how do we solve it? We create an efficient argument format. Efficient for this case. It's called SIVA. We archive each repository as a single file. We have a custom transbackend, bake it to go Git, that operates on archive repositories transparently without extracting them. And performance updates to them in the most efficient way are both SIVA and HDFS Google Cloud Storage. So we baked all the important details of this into this storage backend and now we can just go Git transparent with this kind of repository. You can read more details, presentation details about this in our blog. All the details about how this format is designed and so on are there and it's also open source, so you can use it for other stuff. So what I told you up to now is one of our main use cases. I would like to highlight a couple of projects that use Go Git and that might be interesting for the Go audience. One is Git URL, which is a SQL interface to Git and you can just use it to run it on any Git repository and you can write SQL queries against the repository. Very soon it will be implemented as a code database driver so you will be able to connect your ORM to your Git repository. It's a pretty crazy thing to do, but you can. We also have a ghost table. It's a service, it's a self-hosted service. It's like the GoPackets.in service. Who of you know GoPackets.in? Right, less people than I thought in the audience. So with GoPackets.in you can provide URLs to Git repository that go into specific branches and you can use that in your Go imports for making imports that are stable and will depend always on the master branch. GoPackets.in is the most popular service for doing that but you can just go stable to run your own on your own domain with public and private repositories. So it's recap.  We have been using it for more than one year in production with millions of repositories. So even if the feature set is not complete there's already a very solid base there. And we have implemented a lot of advanced use cases in Go that would otherwise be quite a health implant in, for example, like recently a new kind of Git storage was presented by Microsoft and they do something that is similar to our storage backends but using the command line interface. So they had to implement a kernel driver with a new virtual system for doing that in a pretty complex way and in every case that was just like 300 lines of Go. So here you have the project. URL like Git have the stable version import, the development version import. You see what Go stable does. We have this fancy URL for our imports. Well, that's all. Thank you. I think we have quite a lot of time for questions. Yeah, of course, lightning talk. Hi. How big is the project currently? Maybe a number of lines of code or something and how much we'd grow in the future to get to the same capabilities as LibGit or JGit. Yeah, so size, I would have to check out. Does any of my colleagues know what the size in landscape code? Well, the thing about having time is that... Sorry? Yeah, this is quite tricky because my screen is blacked out. So I have to type like this. But I don't know, what's maybe 30,000 lines of code? Maybe? I'm not sure. So we implement... So up to now we have implemented everything that we need for reporting analysis, which is not what most users want. So we can clone, fetch, pull, push. We have client and server side for both of those. We can traverse repositories. We can generate this or all that kind of stuff. So it's pretty complete on that side. One of the major missing parts is creating commits. So if you actually want to create new commits programmatically, that's not there yet. But it should be the next stable release. And when we will be on par with JGit or LitGit 2, so maybe fully on par with fully prodded years. So yeah, not anytime soon, anytime soon. But for features that we implement, we implement a lot of possibilities for extending the behavior that you do not have with those libraries. Does that answer the question? Yeah, I'll give you another mic. Okay, thanks. Thanks, Vartugo. You said that you are identifying the repositories for the press commit. How do you deal with the boiler press repositories that are used just based for many projects? Yeah. So there are a couple of cases. One easy one is the boiler plate that you copy as an initialization, such as the gitignore file. But in those cases, the hash of the first commit is different because the commit includes your author name, the timestamp, and the commit message. So even if you start a repository with the same content as a different one, well, you have, like, WordPress or this static page generator that you use clone. So currently, we just store all of them as forks, which is actually what Git has done internally. And we don't differentiate among them. We see all the webpages completely independent webpages done by different people as forks of the same project. We analyze all of them, but we interpret them as forks. So we didn't get into the problem of solving this. But we might try some stuff in the future, such as trying to detect a point in time where the code base diverted a lot in them. I guess it would be definitely possible to do that. The only thing is that that's very computationally expressive. So in our case, for example, but only because of our use case, we are focusing on code and we don't care that much, for example, the usual example of static generated pages. Actually, they are bad for us because we are trying to understand whole people codes and contain a lot of auto-generated code. We don't want to interpret your auto-generated code as if it was writing by you, because you are not writing code. But yeah, I guess we'll have to do something in the future. So I have a question regarding your fork detection algorithm. Do you support detecting Git graphs when you graph two repositories in one? Yeah, it's really tricky. I saw a simple example where there was only one initial commit, but if you take the initial Git repository, it has seven initial commits or seven root commits. In our case, in our application, we make the distinction of root commit, which are all roots have no parent, and we made this arbitrary definition of the initial commit, which is root commit, so for our reference, is the root commit that you reach by going through the history only following the first parent. So when there is a merge, we only follow the first parent and we always reach the same initial commit. So Git has seven root commits, but only one of them is initial commit. It's actually the proper first Git commit, and the other were like tools and things that were merged into that over time. And we store all of that in the initial commit. If you have a fork that, in the case that you merge two different repositories, you still have some forks that might have a different initial commit even if they share part of the history. They will store independently in our storage. And we are now trying to figure out, so now currently that duplicates that information in some cases. Now we are trying to figure out if we use Git alternates to even share information in those cases. That's still a working progress. Thank you. So my question is regarding the extensibility of this. So you mentioned that it's easy to write, easy to write new search backends. But Go only supports static leaking, right? So you have to kind of work the project and create it and make a kind of compiling plugin or something like that?  It's not meant for writing a command line client.  Which in fact we are kind of doing, but just for as an example. So if you do your own storage backend, you will be using an application. And in that application you will be also importing Go Git. You will be importing your storage backend and you will be passing it to Go Git. So how does static leaking affect that? Yeah. I mean, that's the use case. It will be much like tricky if you want to do the Git command line where you can plug a storage backend as a plugin and runtime writers and create that. We don't try to do that at the moment. That would be a good contribution. Cool. Any other question? All right. So thank you.