text:
The Hole Left Behind: Falling (Part One)
Series: The Hole Left Behind
By MCBrain - sunboy123_@hotmail.com
Category: Brainwash Tags: #faggot #cock shrink #submissive
Copyright © 2019 MCBrain. All rights reserved. This story may not be reproduced or used in any manner whatsoever without the express written permission of the author.
Daddy Jude puts his plan to well and truly break Carlito into action. Meanwhile, other forces begin to make their presence known
This took waaaaaay too long to write lol. My bad.
I think I'll focus on finishing this story before I start on any other ones I have. That's not a promise tho lmao
Part two comes out whenever I finish it :P
The stink of men hung in the air. That was simply how the apartment smelled now. Not the apartment where Jude and Carlito had been living. No, they were kicked out of that place six months ago, about the same time when Daddy Jude first fucked Carlito. No, this was the penthouse of the high-rise Daddy Jude now owned.
Everyone called him Daddy Jude now. It was his brand now. Daddy Jude and his Slutty Bois. With, of course, the Star boi, Puto Carlito.
Ever since that first video on Snapchat, people had been clamouring for more. Faggots and bois all cooed and moaned at how hot it was for Daddy Jude to have trained Carlito so well, messaging Carlito about it. Some of them had even sent in videos of themselves, begging Daddy Jude to make them like Carlito.
So of course, Daddy Jude took them in.
All twelve of them stayed with Daddy Jude in the apartment, most of them sleeping in a pile around their Daddy in the King size bed. The most clothing they ever wore in the apartment was a sexy jockstrap or thong, unless Daddy Jude decided that they should be wearing some sort of jewellery, like Angelito's cross necklace. Of course, they wore clothing outside the aparment, though they never really left it unless it was to shoot a video. And the things they wore to shoot videos didn't usually cover much either.
Not that the bois minded. They would do anything for their Daddy Jude. So much so that they would often compete for Daddy's attention. However, from the beginning, there had been a clear hierarcy of bois in the order of when they first messaged Daddy Jude.
Carlito was of course, the Alpha boi.
All eleven other bois looked up to him like their idol. They all wanted to be as slutty and obedient as Carlito. To them, Carlito was an idol, a prophet sent from heaven, to teach them the ways of serving Daddy Jude.
"Daddy's pleasure is always more important than ours," Carlito would often say, "His pleasure gives us pleasure."
The bois found that this was true. After Carlito had told them this, they found that they often could not feel pleasure unless Daddy was pleased. Some even realised that they physically could not cum unless Daddy ordered them to.
Of course, Daddy Jude exploited all of these quirks in his videos. One of the bois, a Maori muscle-slut named Tayn, found that he physically could not do something Daddy ordered him not to do. So, Daddy had ordered him to so squats on his cock, while holding 100 kilo weights on his shoulders. Daddy made him squat for an hour before ordering Tayn to cum. The resulting orgasm had been explosive, spraying to the ceiling, making Tayn's eyes roll to the back of his head. The orgasm lasted a full 30 seconds, and all the while he stayed completely still as a statue, unable to let go of the weights.
The Daddy Jude brand was building a name for being all about bottoms that took more pleasure in getting their partner's off than in their own pleasure. Everything they did was in order to make tops hard and horny. As such, Daddy Jude had started a couple of joint accounts, where the bois would play with each other, giggling and eyeing the camera; all for the enjoyment of horny tops.
To Carlito, this was all very natural. Of course he had to submit to Daddy Jude, and do as he said, because Daddy Jude was helping him be a good Christian Gay. God made men, and god made women. Men were supposed to be with women. However, this couldn't work with gay men, because they were attracted to other men. Being men, they needed to release, as god intended. So in order to allow this, god made a special prayer that made some gay mens' holes into fuckholes.
"You need to help all those other gay men out there, Carlito," Daddy Jude had told him, "You have to use your hole to make other real Men happy."
Carlito found he had to agree. He always found he had to agree with Daddy Jude, especially when Daddy's cock was buried inside his hole.
So Carlito let his Daddy tape them, then when the other bois came, he taught them how to pray, to cleanse their holes, then how to make Daddy Jude's cock happy.
Despite all this, however, Carlito remained as Daddy Jude's top boi, in almost every sense of the word. Carlito's videos outdid his sisters' by a landslide, and he was by far the most in-demand bottom out of the bois.
However, no one but Daddy Jude fucked Carlito. Even when Daddy Jude started renting out the other bois about a month ago, and the requests for Carlito came in like a breaking dam, Jude always refused every single offer. When his prospective clients asked Jude why, the answer was always the same:
"That boi isn't ready yet. But when he is…I'll put you in line."
Carlito, of course, was too dumb to even know something was going on. Or that he was being treated special. He was a bit sad when Daddy Jude ordered him not to watch his own videos, or any videos he made with any of the other bois, but his fleeting doubts disappeared once Daddy Jude fucked him nice and good once. When the other bois came back and told him about their exploits with other men, he just giggled along with them and gave them more advice on how to make those real men feel good. He had a lot of time to think about that now, since Daddy Jude had told him that he was not allowed to pick his own clothing anymore. Instead, Carlito never wore anything, unless he was explicitly told to by Daddy Jude, or one of the Producers of the videos they made. If Carlito had his wits about him, he might have realised that he hadn't seen himself, not even in a mirror, or a picture, since Daddy Jude started fucking him…
Just as Jude planned.
"Ooooh~"
Carlito moaned, arching his back. His eyes crossed briefly as he pushed his ass into his partner, Tayn's, face.
"You love that don't you, Carlito?" said the man holding the iPhone in Carlito's face.
Carlito couldn't answer, because at that moment, Angelito had decided to give Carlito a full-on, passionate kiss.
Angelito was a lithe, slender boi, a few shades darker than Carlito, but with a youthful, almost innocent face that went completely at odds with his insatiable ass. Angelito was the first boi to drop everything and come to Daddy Jude, actually interrupting Jude and Carlito in the middle of sex when he first arrived. When Daddy Jude answered the door, he immediately dropped to his knees and began sucking, without even introducing himself.
Tayn had come later, once Daddy Jude's bois had moved to LA. The muscle slut was a total bottom, like the other bois, but his solid, well-defined, Islander body made him a good pseudo-top when playing with the other bois. When Daddy Jude had first seen Tayn, who had arrived without a shirt, islander tattoos covering his arm and chest, he had assumed that the boi was there to rent one of his bois (though, at the time, they had not started that service yet). He was pleasantly surprised then, when he found the large man was instead another set of holes to use.
Currently, the bois were filming a snap for all three of their channels, as well as a video for their site. The concept was that a fallen angel (Angelito) was trying to seduce Carlito so that he could steal his innocence (in the form of his cum) so that he could get back to heaven. Meanwhile, a minion of the Devil (Tayn) was seducing Carlito to steal his soul, so that if the angel took Carlito's cum, he would instead fall further, possibly into Hell.
As such, the bois were all dressed for their parts. Angelito had on a set of fake angel wings, and a grey, Miami Jock Mesh and Metallic Jockstrap with Rings. He also had on white thigh high socks, lightly decorated with two red bands around the top. In order to show his fallen nature, they went with a grey jockstrap instead of white, as well as a studded collar around Angelito's neck, at the front of which had a large ring, which lead two, thin chains down to rubber nipple clamps, which were currently pinching the boi's sensitive nubs. Tayn, on the other hand, had on black devil horns, and to show that he was in opposition to Angelito, had on a black version of the same jockstrap. Daddy Jude and the producers decided that his physique could sell the rest of the character.
The two of them were currently fighting for Carlito's attention. Initially, the producers had thought that Angelito and Tayn could use this opportunity to bolster their own fame a little. However, as filming went on, they realised quickly that the real star was, as always, Carlito.
In order to convey his slowly corrupting nature, they had initally had the star wear white, however, at this point in the story, Carlito was almost completely corrupted. Therefore, they had him change to a black, Secret Male SMA004 Top - which was basically a black, see through bra - along with a black and jade thong, with black frills around the waist (specifically, a Secret Male SML001 G-String), and black, thigh high socks, with two jade stripes circling around the top.
At the beginning of the shoot, Tayn had seduced Carlito on a bed, flipped him over, then began eating his ass out. Carlito had been on all fours, pushing his ass against Tayn's face, until Angelito had appeared, lifting Carlito's chin and kissing him. In the previous scene, Angelito had been gangbanged by a group of demons, but had not cum. However, he had been cursed; if he came before stealing a human's "innocence," then he would become part-demon. To make it harder on the fallen angel; they had left a demonic butt-plug in him, which slowly increased its intensity as time went on.
Carlito intertwined his fingers with Angelito as the bois kissed, back still arched. Angelito sat almost seiza style - ruined by the fact he was leaning forward for the camera to capture the vibrating plug in his ass. As such, they were almost in a weird mirror-image of each other, hands held palm-to-palm, fingers intertwined as they kissed, cocks hard and straining in their pouches. Their bodies shivered with pleasure as their holes were filled and prostated stimulated; Tayn's tongue working Carlito's hole as if it tasted sweeter than chocolate, and Angelito's vibrator increasing in intesity. As time went on, the bois' knees kept moving further and further apart, holes tightening, backs arching further, until their chests were pushed right up against each other. The bois took a moment to glance at the camera, before Angelito moaned into his partner's mouth.
When the Latino bois finally broke apart, Angelito went straight for Carlito's nipples, kissing, sucking, biting. He kept his grip on Carlito's hands as the human boi moaned, desperate for release.
"That's right boi," said a warm, husky voice into Carlito's ear, "Give in to the pleasure."
Carlito gasped as Angelito bit down suddenly, eyes rolling to the back of his head.
Tayn and Carlito immediately stopped as Angelito lay there, cumming. Ignoring him, Carlito turned to the voice who spoke.
"Hey, Daddy," he giggled, and Jude smirked.
"Someone clean the angel-boi up," sighed the director, "And let's call it for today. We got a lot, and we can finish tomorrow."
Tayn picked up the still-twitching Angelito, and walked off as Carlito and Jude made out passionately. The rest of the crew posted the snaps, and began to pack up the equipment.
"Come with me," Jude growled at his boi when they broke apart. Meekly, Carlito followed Jude.
Minutes later, a giggly Carlito hung off his Daddy's arm as they walked through the lobby of the building. Jude was dressed in a smart, but very fashionable midnight blue suit, whereas Carlito hadn't changed since the shoot. As such, they drew some attention from the people in the lobby. Carlito waved flirtily as the men looked at him in mixtures of disgust and lust, though somehow, the majority of it seemed like lust (in the very back of Carlito's mush of a brain, he had the haziest of foggy thoughts that this was not normal). Jude simply smiled, and lead his boi outside. A long black limo was waiting for the two of them.
"Get in," ordered Jude.
Giggling dumbly, Carlito did as he was told.
Inside the limo were two other men in suits, who stopped their conversation immediately when Carlito stepped in.
"Hey boyyys," Carlito giggled, "Are you all friends of Daddy Jude?"
"They're all here to watch you babe," said Daddy Jude, sliding in behind Carlito and closing the door. With a nod to the driver, the limo started to move.
Carlito immediately straddled his Daddy, and started to grind against his lap. Jude grunted approvingly. Carlito went in for a kiss.
"No," said Jude gently, "Not yet, babe."
Carlito pouted as he continued to gring his ass, throwing his arms around Daddy Jude's neck. In return, Daddy Jude started kneading and slapping the boi's ass, making his gasp and groan.
"So?" said the black man sitting next to the couple, "We gonna get a piece of that or what?"
"Patience, Mr. Green," said Jude, still grabbing at Carlito's ass, "I promised you a show and a feast, didn't I? You'll get both."
"So he's finally ready?" asked an Asian man as he sipped at his champagne. The ends of a tattoo could be seen around his neck, giving the impression of a dangerous man dressed in a suit.
"He will be by tonight," promised Jude.
"Daddyyy…" Carlito whined. He couldn't care less about what the men were talking about. It was all in one ear and out the other.
However, he could feel it. He could feel the men's cocks throbbing with desire, desire for him. The thought of getting so many cocks hard in one place made Carlito's hole twitch. That, added with the scent of so many horned up men in a room, made Carlito's head fuzzier and slower than ever. The fog of pink horniness he had been living in for the past half a year grew thicker and thicker, his hole and dick throbbing for attention. He couldn't see, couldn't feel anything but heat in his cock and emptiness in his ass.
"Just a bit longer baby," growled Jude, brushing a hand against Carlito's Slut Mark.
"Daddyyy!!" Carlito moaned, "I'm soooo emptyy!!"
The men in the car couldn't keep their eyes off the boi.
"He like this in real life? For real?" said Mr. Green.
"100% authentic," Jude grinned, as he took out his cock and shoved it in his boi, "Better?"
"Ah!" Carlito went crossed eyed for a moment as Jude continually stroked his Slut Mark while gently thrusting into his hole.
"Shhhh boi," whispered Jude, "How 'bout you sleep for a bit, huh? Sleep for me…bitch…sleep…"
"Hnnnnnnnn…" Carlito moaned happily as he leaned forward into his Daddy's chest. He smelled so good…Carlito felt so safe here, so warm…hole filled…Slut Mark being stroked…foggy and hazy and…and…and pink…and bubbly…and…good…
As the boi fell into a daze, Jude whispered into his ear.
All Carlito could hear at first was moaning.
He felt weird and floaty, like he was floating outside his body. He didn't mind; sometimes, after Daddy Jude told him to sleep, Carlito felt like this. Usually, when this happened-
Look at that faggot
-Carlito grinned. Yeah. When this happened, usually he'd start hearing Daddy Jude give him orders.
It didn't take long for Carlito to find the faggot. He was the one moaning, straddling a big black man on a Queen-sized bed. The faggot shook his hips as he bounced, clearly very used to milking cock.
"You like that, don't you baby?" growled the black man.
That boi is such a faggot, isn't he?
"Yes," answered Carlito. He frowned. Something was weird…
The black man slapped the faggot's ass, making him gasp, and drawing Carlito's attention. He started observing the boi, noting what he was wearing. He didn't have a top on; only a black collar very much like the one Angelito had on earlier. The clamps clung tightly to the faggot's sensitive nipples, shaking up and down with the faggot's bouncing. He was also wearing what looked like a black, see-through thong with frills along the waist and two pink bows adorned on the waistline around the crotch. However, Carlito quickly realised that this was not a thong, but instead, a jockstrap, because of the two small lines of fabric shaping the faggot's ass as the black man's ebony cock sunk in and out of the faggot's bubble butt. Carlos could imagine that cock getting buried deep in that hole…like it was going up to reach the tramp stamp on the faggot's back from the inside.
Wait. Carlito frowned. How could he see behind the faggot…?
With a start, he realised that the room that the faggot and the Man were fucking in had two mirrors for walls; one behind the bed, the other opposite. That was how Carlito was able to see both the front and the back of the faggot!
But wait…if he could only see one of them normally…didn't that mean…
"Why you slowing down, faggot?" the man growled, slapping Carlito's ass, "Get to it."
All of a sudden, sensation came rushing through Carlito's body; the thick smell of Man, the feeling of his hole being filled and stretched out, the sensation of a hard, warm body underneath him. His cock was leaking with desire, nipples burning with pleasure as Carlito starting bouncing harder.
"I'm… I'm n-not," Carlito whimpered, "N-n-not…fag-g't…"
The black man suddenly thrust into Carlito's hole, making him gasp and shiver.
"What did you say?" he ask- no, demanded.
Carlito moaned.
"'m not," Carlito managed, "N-not…f-f…f-faag't…"
The black man grinned. He grabbed Carlito by the hips, then thrust into him powerfully, once, twice, thrice…Each thrust made the boi shiver, gasp, the fifth one making him go cross-eyed with delirious pleasure.
"Not a faggot?" Mr. Green chuckled, "You're funny, faggot."
Andre Green had been happily married to his white husband up until about five months ago. When Andre had come back from work to find his then-husband needily fingering himself, he had known something was up. Firstly, Devon had been on a dom streak for the past few days, which conflicted with Andre's own domming desires. This wasn't unusual, since they were both verse, and they had figured out a system for this long ago. It was just that today, it had been Andre's turn to bottom, but it seemed that his husband was on a sub streak, so he payed no attention to it.
The thing that really stuck out was the way his husband had started talking about pornstars. Specifically one porn star, some bottom called putocarlito on Snapchat. It was all he could talk about for hours on end. He had started practically begging Andre to watch putocarlito's snap stories. In the end, Andre had relented, watching one story.
What he saw made him laugh. There was no way anyone could be that sub, he had said, handing the phone back to his husband. It's all fake.
And yet…as the days went by, Andre could not forget what he had seen; the way Carlito moaned, the way he looked at the camera, eye-fucking millions of unknown viewers with those glimmering irises, the way he shook his rump gently, biting his thick lips, moaning for Daddy…
Andre had found himself watching more and more Carlito vids by the day, each and every one of them making his dick hard. After every watch, he called his husband and fucked him ferociously, calling him names, degrading him, harder and dirtier than they had ever before. Each time, Andre came away feeling like a king, as his husband lay there, drooling and leaking, spent from their fucking.
About a week after they stopped having sex and started fucking, Andre found that his husband was changing. He seemed spacier than usual, forgetting important things, losing track of time. The first time Andre called him out on this, his husband had simply giggled, surprising both of them. While he wasn't the most masc of the pack, Andre's husband certainly wasn't the type to giggle. However, ever since the videos, Andre had noticed that his husband was getting more and more femme. He started wearing more revealing clothing, more colourful underwear, and started using shorter and shorter words. It had been fine at first, but as time went on, he simply got…faggier.
A month after they had started the videos, Andre's husband had stopped working. He had been a junior partner at a law firm, but he found that he simply could not focus on work anymore. Instead, he spent his time working out to aerobics videos at home, cooking, cleaning, and playing with his hole like some useless fag.
Andre on the other hand, had only gotten more executive. In about three weeks, his aggressive negotioations and business tactics had earned his company over half a million dollars, and there was serious talk of a promotion. There were even some rumours about him taking over the CEO's position once he retired next year. Andre hadn't been a candidate before, but if he kept up the aggressive deals, he was very much in the running. The fact of this made Andre swell with pride; he was a real Man, someone who knew what they wanted and went out to get it. Someone powerful, someone strong.
This knowledge about himself then made him feel sick when he looked at his husband. Here was a man - if you could call him that - who had been given everything from birth; a large inheritance, fancy school, proper upbringing. He even had a high status job at some point. However, he had squandered it all away, for what? For sex? For the feeling of his hole being used?
"You're a useless, white faggot, arent'cha?" growled Andre as he fucked his pussyboi husband, "You ain't ever gonna fuck anything with that oversized clit of yours, aren'cha?"
"Y-yeaaah!!" the faggot had moaned, "I'm j-just a! Cock loving! Pussyboi!"
The day after, Andre had made the faggot sign over every single one of his assets over to his name. Then he divorced the bitch, disgusted that he had ever even entered a partnership with such a faggot. Faggots weren't for marrying at all.
However, there were other uses for faggots.
For example, Andre now had thirty two faggots in his mansion, all of them his personal slaves. Not servants, slaves. He had his former husband whip up a contract which allowed Andre to take control of every facet of a faggot's life, legally. With it, he had managed to become CEO even before the old faggot's retirement, forging a path ahead on the backs on his slaves. Andre made sure that his slaves were only rich, priveleges white faggots, and not other Men who simply hadn't had the same opportunities as he had. As such, the business world in LA was slowly changing, the old white heads falling, one by one, to younger, more powerful Men. And Andre was at the head of it all.
These days, Andre's former husband - now known as The First Maid - rarely left her bedroom. She wasn't a woman, no, women were needed in society, and should be respected. However, there really wasn't a word to describe her other than "faggot" or "sissy," so Andre just called her a "she." After all, Andre was a Gay Man, and he didn't even fuck the needy cunt-boi anymore, he simply let him watch as Andre fucked other bois. Of course, The First Maid was allowed to touch herself while she watched, and Andre allowed her to use as many toys as she liked. She never touched her dick, even though Andre hadn't specified that detail. The only thing he ordered was that she was never, ever, allowed to cum.
"Please," she would beg from the corner of the room, fucking herself on a dildo as Andre pounded into a new twink, "Please…"
Andre loved having so much power over his former husband. He loved controlling her orgasms, controlling her life, humiliating her. The fucking bitch loved it too; she never said no, no matter how depraved Andre's orders were. She lived for him, which made him want to control her more, debase her more. He had taken everything from her, her title, her money, her power, her gender, her orgasms…and he wanted to take more.
So what if he took her favourite porn star?
Andre Green remembered Jude's promise to him as he thrust once more into Carlito's hole, and picked up the phone on the bedside table. He pulled out of the boi, turned him around, then flipped him onto the bed.
Immediately, Carlito groaned with frustration, and raised his ass off the mattress. Andre had him pinned down sitting on his legs and pushing down on his back with one hand. Carlito moaned as he tried to put together his scrambled thoughts, further scrambled by the lack of cock in his hole. It had been so long since he tried to think, he didn't know how anymore. His brain was just a fuzzy pink mess of sex and cum. But he kept trying, trying to put together the thoughts…
"N-not…fag…"
"Then why you raising that ass, boi?" grunted Andre, "You saying your faggot ass don't want this cock?"
My hole is for Men to use… thought Carlito dully, before Andre's cock suddenly thrust back into his hole, clearing any thoughts from his mind.
"Haaaaahh!!" Carlito moaned girlishly, as Andre started to fuck him in earnest. Each thrust seemed to chip away at something inside Carlito, melting a part of him into his balls, ready to be ejaculated from his throbbing dick.
Meanwhile, Andre opened Carlito's Snapchat account, and started to record.
"My name is Andre Green," he said into the camera, still fucking the boi. He turned the camera to the boi being fucked.
"Tell the world who you are," Andre ordered.
Carlito simply moaned.
Andre slapped his ass firmly, making the boy whimper. He made sure the camera was on the boi's drooling face.
"I said, say hi to the world, bitch!"
Carlito could barely understand the words he was saying. He managed to gasp something out with each thrust into his hole.
"H-hey! I-I'm! puto! carlito!"
"Fuck yeah, you are," grunted Andre, focusing the camera down to his cock buried in the slut's ass.
"How you like my big, black dick?" growled Andre, getting a good grip of Carlito's hips with his free hand, "Tell the truth now."
"Unh! Hah! Ah!" Carlito moaned. His body was so hot, his hole so greedy and hungry. His feeble thoughts were tossed out the window, his mind reacting only to his body's desires.
"More! Want! More!" Carlito whimpered between thrusts.
"Yeah, you like that, don't you faggot?"
Carlito's mind stuttered over that last word, but the sensation of cock inside him pushed it out of his mind.
"Yheeeeessss!" he moaned, heat bulding up in his balls. His dick strained uncomfortably in its pouch, a damp spot clear and glistening on the black fabric. His nipples sent shock after shock of pleasurable pain through his body with every thrust of Andre's cock. There was no thought anymore, just pure, heated sex.
"Yes, Daddy," Andre corrected, slowing his thrusts, but increasing in power, "Daddy! Andre!"
"Yes! Daddy! Andre!"
"You want this Daddy Dick, bitch?" Andre started shouting, "You want this black Daddy Dick?"
"Yehz! Daddy! Andre!"
"You a slut for this dick, bitch?"
"Yes! I'm! A! Slut!"
"Such a greedy pussyboi for black dick?"
"Love! Dick! Daddy!"
"Who's you're Daddy?"
"You!" Carlito gasped, "Daddy Andre!"
"Fuck!" Andre roared. It was all too much; the boi was so fucking sexy. He came in the boi's ass, thrusting deep as he could.
The sensation was too much for Carlito; as he felt himself fill with cum, he felt like his brain was about to burst. It was too much, everything was too much, he had too much-
Carlito came, harder than ever before, his asshole tightening and body vibrating with heat. The chains from his nipples jingled as he fell face down onto a pillow, mouth open in an 'O.' His eyes rolled to the back of his head, as he felt something…something vital leave his body and mind.
With a sigh, Andre pumped a final burst into Carlito's ass. He stopped recording as he pulled out, leaking cum over the boi's ass and sheets. He added the video to putocarlito's story, then, remembering his promise to Jude, he took a pic of the boi's leaking fuckhole. Before also adding it to the story, he made sure to add a caption:
flame emoji Puto is open for business flame emoji
With a grin, he sent the pictures off.
In a mansion in LA, a faggot in a maid uniform fucked himself on a 15 inch, vibrating, black dildo as he watched putocarlito's new story.
"Oh fuck," she moaned, taking in all 15 inches up to the hilt, "Oh fuck."
Andre Green whistled as he walked out of the room. He spotted the Asian man he had talked to in the limo waiting outside, sitting in what looked suspiciously like a waiting area. The Asian man looked up as Andre walked up to him.
"He's all yours," he said cheerily.
"You do him like I asked?" questioned the Asian man, reaching into his pocket.
Andre smirked.
"I know you could hear us," he said, "So pay up."
The Asian man simply handed Andre his wallet. Andre took it without question, then turned to leave. After a few steps, he turned around. The Asian man was at the door of the room Andre had just exited.
"You know I was planning on fucking the bitch til he screamed anyway," he said, "So why you pay me doe something I was already planning on doing?"
"Did you call him a faggot?" asked the Asian man, looking back.
"A couple times," Andre answered.
"Just wanted you to prepare him correctly for me," said the Asian man, "I like my cunts properly warmed up."
Andre shook his head, but he seemed satisfied.
"Whatever," he said, and left.
The Asian man turned back to the door, took in a deep breath, then turned the handle.
Carlito sat up, hugging his chest, shivering slightly. For the first time in a long time, he didn't feel floaty or blissed out and pink. He felt…weird.
There was a weird feeling in his stomach, and not it the good "big dick inside me" kind of feeling. It felt icky and gross, and…Carlito didn't like it.
And he didn't like how that man called him a faggot.
He wasn't a faggot. A bitch, a slut, a boi…but not a faggot…he was Godly…he was Good…right?
Carlito shivered slighltly as he sat there on his knees, hugging himself, back slightly arched in his kneeling position. Even now his body unconsciously positioned itself to look sexy and appealing for Men to enjoy. As he looked up and saw himself in the mirror, seeing how he was positioning himself so seductively, the hint of a thought began to form in his mind.
Maybe…maybe he was…looking like this…could Daddy Jude be…
Carlito was thinking so hard, for the first time in a long time, he didn't notice the Asian man walk into the room.
Could it be that…Daddy Jude was…was…mani-
"You look pathetic, boi," the Asian Man growled, causing Carlito's thoughts to shatter the instant he heard the deep baritone.
The moment Carlito noticed there was a Man in the room with him his hole began to twitch and pulse. He shifted uncomfortably in place and bit his lip, trying to gather his scrambled thoughts together.
The Asian man threw something at him.
"Put these on, slut," he commanded, "I'll be waiting."
Carlito's body moved before he even realised what he was doing. He went into the next room, and changed, and found himself standing in front of the mirror.
Is this…me? Carlito found himself realising as he inspected himself.
His legs were snug in a pair of Leg Avenue Women's Opaque Nylon Thigh High Stockings, all cutely shaped with his feet adorned in simple, white, Lifestride Parigi Women's High Heel Pumps. His junk was covered by a frilly, white, lace jockstrap with a white miniskirt sewn around the waistline. Carlito knew these were called Ivory Satin Wetlook VTG style sissy crotchless butterfly heart lace skirted butless panties, the same way he knew that the white, heart shaped pasties over his nipples were called Nippies Bride Like A Virgin.
As he instinctively turned and posed with his toes pointing together and his ass pushed out, for the first time, Carlito wondered how he knew all this stuff. With all the sex and Men in his life, Carlito had very little time to learn new things. Most of the stuff he had learnt was about pleasing Men, making their big, Manly Cocks happy…Carlito's hole winked in the mirror as he inadvertantly thought about Cocks. The skirt was too short to cover his fat ass, after all. Cocks were just so big, and hard, and juicy and big and warm and-
No, no, he shouldn't- he was-
"You done there, boi?" the Man called from the other room.
"Yes Sir!" Carlito answered immediately, coming out of the room before he had time to think. His body was already so conditioned to obey, to please Men…
As Carlito stepped out of the bathroom, the Man looked him up and down. Carlito gulped as the Man took him in his hole twitching constantly. The Man was built lean and hard, muscled and toned. He had a large tattoo of an multicoloured Oriental dragon on his left arm, travelling all the way up to his shoulder and pectorals. He wore only black slacks, with a gleaming silver belt buckle.
He sat at the edge of the bed where Carlito had been fucked for the last couple of hours. He beckoned the boi to come over, and Carlito found himself standing in front of the Man. Being so close to a Man made Carlito's hole ache with longing, his dick tenting his miniskirt.
The Man placed his hands on Carlito's shoulders, then forced him to turn around. Carlito ended up sitting in the Man's lap, knees together, facing the mirror as the Man whispered in his ear.
"You look like such a fucking girl," he growled, making a shiver run up Carlito's spine.
"Such a girly boi," he continued, "Such a dumb, girly, faggot."
He spat out the last word like an insult, like a weapon. It had the intended effect. Carlito squirmed as if physically hit.
"I-I'm not-" he stutterd, "N-n-not- Not a-a-a. F-f-f-"
It wasn't fair. Carlito could feel the Man's huge cock pressing up against his hole. He could feel his arms holding him, tight and hard, masculine, sooo much bigger and stronger than him. Just being this close to a Man was enough to make Carlito's brain all fuzzy and pink and warm and gooey and slowww…It wasn't faaair…
"Not a faggot?" the Man seemed amused, "Then are you a girl?"
"N-n-no…"
"Then if you're not a faggot, and you're not a girl," the Man continued, "Why are you dressed like one?"
"I-I'm not-" Carlito panted. His hole was pulsing like crazy. It felt so empty. He just needed it filled, just for a bit, just a bit. Carlito started pressing his ass against the Man's cock, just to ease the pressure a little. Just a bit so he could think. He just needed it filled, just a bit, so he could think for a bit, so he could get his brain together. Just for a bit…
"You're pushing against me like a bitch in heat, faggot," the Man growled, "You're such a dumb slut. Bet you couldn't even finish high school."
That wasn't true. Wasn't it…it couldn't be true…because Carlito met Daddy Jude in college! Yes, that's right! Carlito was smart. He was smart enough to go to college! That's where he met Daddy Jude!
"I'm not dumb," said Carlito, his mind clear for just a moment, "I went to college!"
The Man just laughed at that.
"Oh?" he said, "What did you study?"
"Ummm…" Carlito frowned, trying desperately to think, "Bio…bio…"
"Biology?" the Man smirked, "Perfect."
Carlito wanted to say no, no not biology, it was bio..bio…something else…
"Then you should be able to tell me," the Man continued, oblivious to Carlito's struggles, "What cocks are for."
Carlito recited what he knew about male genitalia from 8th grade Biology. He knew that much at least.
"Wrong," said the Man authoritatively, "Cocks are for fucking."
As if to prove his point, the Man unzipped his pants, and thrust into Carlito's already wet hole. Carlito's eyes went wide from the sudden invasion, mouth opening in a perfect 'o' shape as he moaned femininely. The Man thrust a few strokes inside Carlito, making the boi bounce, panting, before pulling out. The boi collapsed in front of the man immediately, face down, ass in the air, eyes rolling to the back of his head.
"See?" said the Man, "Cocks are for fucking."
Carlito's dazed and scattered brain had to admit that this was some compelling evidence. Cocks were…for…fucking…
"So I guess my next question is," said the Man, kneeling beside Carlito, "What is that?"
The Man pulled Carlito up so that he was on his knees, and then had pulled up Carlito's skirt, revealing the 7inch hard cock trapped in its fabric prison.
"It's a…a…cock…" said Carlito weakly.
The Man burst out laughing.
"That?" said he chuckled, "It may look like a cock, but has it ever fucked anything?"
Carlito mewled. He knew that his cock hadn't ever fucked anything.
"If it hasn't fucked, it isn't a cock, boi," said the Man, "That's just an oversized clit."
No…that wasn't…it wasn't…
"I know because your hole is a fucking pussy," said the Man, "A cunt. Made to pleasure Men."
"It's not…it's a…it's an…"
"It's not an asshole," said the Man, "It makes your fucking clit grow when it gets fucked doesn't it? So it's a fucking pussy."
"That's not…it's not…"
That wasn't true! Carlito desperately wanted to get the words out. It wasn't…it couldn't…but it was so hard! His hole was pulsing, twitching, gasping for more cock. Still on his knees, the boi pushed out his ass and felt his nipples harden under the heart-shaped pasties. It was sooooo good to be filled! If he had just fucked him a bit longer, for a bit more, he could've- he could've thought- he could've-
Carlito's brain was so mushed up already he couldn't even get the thoughts out of his mouth. But he knew that the Man was wrong!
"'s not…fagg't…" he mumbled.
"Fucking faggot's so dumb. Such a dumb, sissy slut," the Man mocked, "Thinks his clit's a dick and his pussy's an asshole."
The Man picked up the horny boi easily, and positioned him back on his lap. This time, however, Carlito was facing the Man, the boi's stocking-clad legs upon his shoulders. Instinctively, Carlito threw his arms around the Man's neck.
"'m not…" Carlito managed, "…dumb…"
"Oh?" said the Man, once more thrusting inside Carlito. The change in the boi was immediate. Carlito moaned loudly as his body relaxed, back arching, hole clenching and unclenching instictively around the cock inside him.
"Then how about you recite your multiplication tables?" said the Man, "If you aren't dumb you should be able to do your twelves."
As he spoke, the Man began thrusting his hips, driving his cock deeper up into Carlito's hungry hole.
"One times twelve is t-twelve," Carlito began, mouth already droolinig, "Two times t-twelve is t-twentyy…fourrr…"
He managed to go all the way up to ten before he came.
"C'mon boi," the Man growled, "Is that all you can do?"
"T-twelve…timezz…" Carlito moaned.
It was so hard to think…his brain was working so slowly, like it was trying to work through mud. A thick, pink, syurpy sweet mud. If he could just…think a little…
At that moment, the Man thrust into Carlito.
"Aaah!" Carlito moaned, thoughts scattering.
This pattern continued for about an hour, with Carlito getting less and less farther up in his multiplication tables before losing concentration. Pretty soon, he was just a hormonal mess, moaning the world twelve over and over, dick standing to attention. He had repeated the word so much it didn't even sound like a word anymore. His head felt lighter too, like it was…emptier. Carlito felt like something had been lost, something that used to be a part of who he was.
"Alright, I guess that's too hard for a dumb bitch like you," said the Man, changing positions. This time, he had Carlito pinned on his stomach.
"How about you try tell me your elevens?"
This went on for another hour. This time, Carlito could get no further than 10, then he would find himself slowly unable to get any farther, his scattered concentration breaking every time the Man thrust into him. He found himself unable to do anything but repeat the number until he would be lost, moaning words he didn't understand, his mind feeling light and fluffy, unable to come together long enough to concentrate. At this point, he forge=ot he was even trying to do something; all that was left was pleasure. Until:
"I see that's too hard for a dumb bitch like you. How about you do your tens?"
The Man's words brought Carlito back, with a new challenge to prove he wasn't a dumb faggot. With another new position, Carlito remade his resolve to get to the end this time.
"T-ten times…times…niii! I! I!!!"
Carlito shrieked as he came. His thoughts shattered once more, as the Man drilled into him from behind. Carlito was on his side, his right leg raised up and held in position by the Man's strong hand. He was so close, so close…he just needed a bit more…more…more…
Cock! Carlito came once again, drooling a little as his thoughts scattered. Id waz szooo harddd…
"Alright, bitch, I see you're too dumb for that…"
No, no, he wasn't! He wasn't dumb! Once again, Carlito rebuilt his resolve, but the Man already had Carlito in doggy and was thrusting in sooo hard! Upon his shaky resolve, Carlito started once again.
"Nine…nine…times…eiiighhh…"
Just a few more…words…
"eighh…eighhht…isss…izz…"
Just a bit…more…
"izz…se..se…seeeveee…"
More…more…moreeee…
"sebeeee…sebeemmmmmtttteeeeeeeeeeee!!!!"
Carlito came again.
"Dumbass bitch, how about your eights?"
Was it just Carlito, or was the time between positions getting shorter?
"Ah-hah! Ah! Three! ttimes! Two!"
"Fuck you're dumb. What about your twos?"
Carlito was vaguely sure that it was taking less and less time before his mind was being absolutely shattered. It was getting to the point where Carlito was actually preferring it when his brain was all over the place; when the Man reminded him to do his tables, it was getting harder and harder for Carlito to throw his resolve back together.
"Two times… Twwwo times…"
Carlito drooled as he came, cock twitching without cumming. He had run dry aaages ago, but his dick still stayed hard. It was aching with accumulated tension; it had been so hard for so long.
And yet, it needed more.
"Huunnngg!!"
Carlito drooled against the mirror, his body sagging. His body was bent over, ass full of the Man's cock, toes on their tips trying to stay up, and face smashed against the mirror. His arms drooped limply; Carlito had no energy left in his body. The only reason he was still in this position was because the Man's cock was keeping him in place.
"Fucking useless bitch," said the Man. He took his cock out, and Carlito collapsed.
The Man stood over the prone boi, cock still hard. He knelt down, and picked up the boi's head with both hands. He opened the boi's mouth, then thrust his cock inside. He started using the boi's throat like a fleshlite. The boi made no response.
"When you wake up, boi," the Man panted, "You're gonna make a choice."
"Either you accept you're a dumb, sissy faggot," groweled the Man, "Or you keep pretending a little longer."
With that, he finally burst his load, filling the boi's throat with his thick, heavy cum. His orgasm lasted a full minute. Then, he got up, picked up his clothes, and left the room.
Jude was waiting outside the room when the Asian man finally left.
"Six hours," he said, "I'm impressed."
"This is nothing," said the Asian man, "Any Man of faith should be at least capable of controlling their desires to that degree."
Jude smiled to cover up his annoyance, while the Asian man put on a shirt. While he did see himself as a godly man, he hated these overly-preachy types. Jude secretly thought that anyone who proffed themselves to be godlier than him were just faggots, trying to hide and repress themselves under the guise of God. They should, but they'd all fail, eventually.
"Well, I'm glad you could help me out," he said, "I do have a question though."
"Why did the Church suddenly decide to contact me about Carlito?"
The more Jude thought about it, the more he thought it was strange. Or at least, he should have. That was what was bothering Jude.
The thing was, when Jude was contacted by the Church about "fixing" Carlito a few weeks ago, he had not found it strange at all. In fact, he was more than happy to have them come and help him. After all, the Church were the people who helped Jude fuck Carlito's ass in the first place. If it weren't for what they preached, Jude would not have been able to coax Carlito into uncrossing his legs. At the time, Jude had not found that weird either. He had rationalized it as the faggot Carlito twisting the Holy Words of God into something sick and twisted.
But the Church contacting him about "fixing" Carlito…when Jude thought about "fixing" Carlito, he meant making the faggot realise that he was a fucking goddamned faggot. The Church shouldn't want that, right? They would want to save Carlito, even if he was a fucking faggot, right?
Of course, Jude did not believe the Church could save faggots from what they were. Jude held the contradictory belief that his own interpretations of religion were the correct ones, and that the ones held by the Church were, while technically correct, were just not realistic. Although he himself didn't see it that way, Jude believed himself to be the only true practitioner of Christianity, and that everyone else had it wrong.
That said, he did actually listen to people, if only to poke holes in their arguments. Which was why he was growing suspicuious about the Church's sudden apparent change in policy.
"That boi…" sighed the Asian man, "Is lost."
Jude nodded, agreeing. "Lost" was Church speak for "a sinner with no hope."
"He…well, he probably thinks of himself as 'she' right now…needs to be at their lowest before they can change," said the Asian man.
Jude thought about this statement for a while, before eventually spinning the man's words into something he understood. Which was that the Church wasn't trying to "fix" Carlito, they were just trying to get him to a point so low that they could mold him into a Man.
The thought made Jude scoff.
What a dumb plan, he thought. There was no way that was going to work.
"Whatever," said Jude, "He ready?"
"His mind: in a few hours," said the Asian man, "But his body is fine."
Jude nodded, and broke out into a grin. He was getting hard; just the thought about what he was going to do was exciting him.
In just a few hours, he was gonna make Carlito into a true fucking faggot.
The Asian man's phone rang as soon as he left the building. He picked it up immediately.
"It's done," he answered without listening for a response. He listened for a while as the man on the other side responded.
"The fuckboy did get a little suspicious, but he doesn't care enough to call us out," the Asian man said, "His dick's too hard for him to think about anything else for too long."
The man on the other side laughed.
"Hmm? A drink with the boys?" said the Asian man, "Is this really you talking Meth?"
"They're new recruits," said the man called Meth, "Need initiation."
"Ah, I see Father Topholes," said the Asian man, "Then I'll see you in- what was it, an hour?"
Confirming the time and place, the Asian man hung up. He looked up at the setting sun, and smiled.
"The Light will come again," he recited, "Revealing their true faces once more."
`, urlGetRevisionDataJSon: "/newStory/getRevisionDataJSon", urlDeleteRevisions: "/newStory/deleteRevisions/396545", urlPublish: "/newStory/publish/396545", urlMergeRevisions: "/newStory/mergeRevisions/396545", urlEdit: "/newStory/edit/396545", urlCreateNewChapter: "/newStory/createNewChapter/396545", urlChangeRating: "/newStory/changeRating", urlEditTags: "/newStory/editTags", urlEditCategory: "/newStory/editCategory", urlSaveAdminComment: "/newStory/saveAdminComment", urlAddNewComment: "/newStory/addNewComment", urlRatingResults: "/newStory/ratingResults", urlRatings: "/newStory/ratings", urlRatingStats: "/newStory/ratingStats", urlDeleteComment: "/newComment/deleteComment", urlUpdateComment: "/newComment/updateComment", urlGetComment: "/newComment/getComment", urlToggleLike: "/newStory/toggleLike", urlToggleBookmarked: "/newStory/toggleBookmarked", urlFetchStoryAuthorData: "/newStory/fetchStoryAuthorData", urlSaveDisableComments: "/newStory/saveDisableComments", urlSaveApproved: "/newStory/saveApproved", urlSaveDeleted: "/newStory/saveDeleted", urlSaveDeletedAuthor: "/newStory/saveDeletedAuthor", urlFetchComments: "/newStory/fetchComments", shareTitle: "The Hole Left Behind: Falling (Part One)' by MCBrain", shareText: "Daddy Jude puts his plan to well and truly break Carlito into action. Meanwhile, other forces begin to make their presence known", shareUrl: document.location.href, }); // Tags $('#newTags').tagSelector({ getTagURL: "/tag/allTagsJSon?excludeStory=396545", getFullSpecTagURL: "/tag/fullSpecTagsJSon", allowNew: true, newTagSelector: '#tagAddWarning', dlgTagListName: '#dlgTagList', btnShowTagList: '#btnShowTags' }); })(jQuery, window, document);


What Our Customers Are Talking About US?
My experience with Saaarthi has been really very good. Their customer service executives are just too good. They facilitated processes very well. Relationship manager handles driver issues very well.
I am a first time user of Saaarthi's services and I must say that they are actually good. I am very much happy with their services. One of the important features of their services is that they follow up with me regularly and train my driver accordingly.


text:
Monica Is Giddy In Love On 'Me + You'
D-Money
Monica might've recently filed for divorce in her real life but musically she's doing just fine. The first single from her upcoming Chapter 38, "Commitment," found her putting in a personal request for exactly what she wanted. Now it seems the Atlanta-based songstress is downright giddy if you're judging by her latest single "Me + You."
The upbeat track is filled with bright, happy synths that flutter and buzz about like butterflies around her vocals. Meanwhile, 808s keep everything anchored and allow the addition of trappy drums to not seem jarring. Monica, meanwhile, rides the beat happily as she describes what it's like to love her man. "When I'm with you the whole world stops," she sings on the chorus. "When I'm with you / I forget about everything that's wrong." On the verses, she's positively gushing about her love, describing what it's like to lounge in her lover's arms all day and bragging that she doesn't see anyone else but him. It's a sweet sentiment and one that's sure to resonate with all the lovers in the house.
Is this one giving us anything different from the Monica we already know and love? Not really — and there's nothing wrong with that. We're sure there will be more signature tracks like this when the singer's Chapter 38 arrives later this year.
TAGS: audio, monica
Previous: Ledisi Looks Ahead To Concert Tour With Special 'Nina And Me' Shows Next: SoulBounce Exclusive: Nuela Charles Has Got A Story To Tell In 'Long Way Down'

redpajama_set_name: RedPajamaCommonCrawl


text:
Statement on the Resignation of Libby Cairns CEO KA Leisure
A spokesperson from KA Leisure said:
"Following a period of absence due to ill health, Libby Cairns has decided to leave her position as KA Leisure Chief Executive, effective from 31st January 2022.
Chair of KA Leisure, Gary Higgon, said: "We are appreciative of the service and contribution that Libby has provided over the years to KA Leisure and we extend to her our best wishes for a return to improved health and a new future."
Joe Cullinane, Leader of North Ayrshire Council, said: "We wish Libby well for the future. We have enjoyed a close partnership with KA Leisure over the years and this will continue going forward to ensure that together we deliver the best health, wellbeing and physical activity outcomes for people in North Ayrshire."
Malcolm McPhail will continue in his role of Interim Chief Executive, until further notice.


…when words alone are not enough.
LOVE. HEARTBREAK. BIRTH. DEATH. WAR. PEACE. PROTEST. CELEBRATION.
There are many milestones in life that are so full of emotion that we often turn to song to find a way to both express and contain our deepest feelings. So join The Pink Singers for an exploration of expression through song, as they perform numbers from a diverse range of musicians.
They will also be joined by Equivox – le choeur gay et lesbien de Paris! Equivox are set to light up the stage with their exciting and dynamic style.
The evening will feature Eric Whitacre's The Seal Lullaby, excerpts from Carmina Burana, Life on Mars by David Bowie, two motets by Mendelssohn, Coldplay's Fix You, and numbers from Bonnie Tyler, Taylor Swift, Pentatonix, Lady Gaga – and more!
Singing soothes, energises, mobilises and delights. So come along to SING! – when words alone are not enough.


Home→Guest Articles→How to Use Magickal Spell Books to Get What You Want and Experience Miracles in Your Life!
How to Use Magickal Spell Books to Get What You Want and Experience Miracles in Your Life!
You'll have learn and even studied the origins of magic and been intrigued by tales of witches and warlocks utilizing grimoires, the traditional identify for magick spell books, to seek out out what elements they wanted to seek out for his or her spells for love, energy, cash and well being. Typically these previous texts have spells for all method of circumstances, suggesting using all types of bizarre and troublesome to seek out components.
In some instances these objects have been symbolic and had a common affiliation, however there's little question that the check of perseverance and dedication find a few of these objects has energy to their effectiveness.
Though there are nonetheless a few of these previous books round, the fashionable magick spell books at the moment are close to as difficult and there space variety of trendy practitioners of magick prepared to share their simplified interpretation of the traditional texts that have been utilized in historic occasions.
To some, the occult spells worry and trepidation, as a result of it's related to voodoo and satan worship, however in truth the phrase occult means hidden or secret and it's in all probability the worry that displaying any information of those teachings and spellworking has prior to now spelt demise to the practitioner that there's nonetheless the worry that information of the occult might result in hazard from hidden forces.
The perfect comparability of an historic grimoire or magical spell e-book is to liken it to a cookery e-book. All spells could have components which were rigorously researched to supply an affiliation with the result. The elements of a spell are usually symbols which characterize on the bodily aircraft one thing which has an affiliation on the astral aircraft and by directing these articles in a specific method we will appeal to or magnetize a end result we want.
That is the idea of voodoo magick, utilizing dolls to characterize the item of the spell and there are specific symbols which may actually strike the worry of dying into those that consider within the energy of voodoo.
Trendy magickal spell books and grimoires strategy magick with out the earlier mumbo jumbo and thriller. Though it's nonetheless mysterious how magick works with none obvious logic there are specific parts of historic rituals which have a common correspondence which could be translated into the fashionable world. Magick works on the astral aircraft and so defies bodily logic.
Some trendy magick spell books additionally include chants which, by way of their use by way of the, ages have been embedded with an influence which may create a end result based mostly on the power of their sound. These can be utilized to create all varieties of constructive modifications and occasions in your life, if you'll solely consider within the energy they've to realize a constructive end result.
The primary factor to know is that there are magickal strategies which you should use to get something you want, with little or no preparation, the primary ingredient being the knowledge in whichever magickal system you employ. It may possibly take some time to again up your perception with motion, however whenever you do you may be astounded on the energy you might have at your command to vary something in your life effortlessly.


The rich coast of Los Suenos has vacation rentals available with lush mountain views, dense rain forest scenery, pristine beach access and much more. It's not an overstatement to say that Costa Rica is as close to a tropical paradise as you can get. Contact Stay in Costa Rica by calling 866-439-5922 and ask to speak with one of their vacation specialists. You'll be glad you made the call.


I am excited that I got to team up with Beauty Encounter to share more about shopping online this season and my four steps to Less Stress Christmas Shopping.
This year I bought almost everything for Christmas online. I enjoy shopping but not during the Holiday Season. You have to fight the traffic, fight the parking, fight the crowds, fight with your kids to behave in long lines and then you find out that the item you wanted is no longer available. So I decided to say no to the fighting this year. I'm doing all my shopping online.
The next step is really important, simplify your shopping list. Really evaluate who is on your list. But also make a plan around that list.
Every year I do a theme and I buy everyone the same thing only in different variations. You can do one item for each person or you can make baskets with a few small items.
One of the great things about having a theme for the year is that you can shop in one place! And with shopping online that means picking one website and buying everything there. That way you can save on shipping and everything should come in one box!
Hint: Need to cut cost? Just purchase the aftershave, you can get a different scent for each guy.
Hint: Will your friends unwrap their gifts in front of each other? No? Then just buy the same item for them all.
Hint: Choose a different scent for each person for group openings. Suggest them to smell and trade if they want.
I found both of these perfume's in Beauty Encounter's Discount Perfume!
Hint: Some ladies do not like perfume, consider other beauty items.
So what is your strategy this year to less stress Christmas shopping?


text:
Home Public School Shakedown Hire More Black Teachers
Hire More Black Teachers
News about disproportionately disciplined black students continues to make headlines. But there's one solution no one is talking about.
by Rann Miller
sunchild123
White teachers disproportionately discipline black students, and lack the rapport that a black teacher could have with their students of color.
Data showing black children in schools nationwide are disciplined more than other kids has been available for years, but this disgrace is still making headlines. This includes a recent article from New Jersey outlet NJ.com noting the disproportionate disciplining of black children in the state's public schools.
According to the Civil Rights Data Collection, during the 2013-2014 school year (the most recent state data available), black students made up only 16 percent of New Jersey's student population but represented 35 percent of all students with an in-school suspension, 39 percent of all students with one out-of-school suspension, 50 percent of all students with more than one out-of-school suspension, and 37 percent of all school expulsions. These percentages are higher than the national statistics.
To address the racial disparity in school discipline practices, the New Jersey Assembly Education Committee has advanced a bill to "create a ten-person task force to 'analyze the effectiveness' of the status quo in school discipline and determine whether they were contributing to racial imbalance."
Black students are more often than not without a black teacher despite the research showing the benefits of to all students of having teachers of color.
What they are likely to find is what has already been discovered by other such inquiries: that black children are disciplined more than others because of zero-tolerance policies, a lack of school counselors, and an increase in police presence at schools.
One way schools might reduce the disproportionate discipline of black students, and other students of color is by hiring more Black teachers.
As a black man and former classroom teacher of black and Latinx students in the high-poverty city of Camden, New Jersey, I rarely gave a child a detention and never recommended that a student be suspended. Like all teachers, there were times I disciplined my students—but I had a rapport with them. My brand of discipline involved a stern look, a firm word, or a phone call home.
Yet many white colleagues of mine had trouble connecting with students of color on this basic level. They often assumed behaviors exhibited by black students—speaking loudly or questioning authority—were disrespectful. Without an awareness of cultural differences—what educators call cultural competency—teachers will have a hard time building the relationships necessary to connect with and educate their students.
In the 2013-2014 school year, 84 percent of teachers in New Jersey were white; only 7 percent of New Jersey teachers were black. That matters because when black students have a black teacher, their outcomes improve. Black students who have had at least one black teacher are more likely to graduate from high school, attend college and are less likely to drop out of school. Black students are also less likely to receive exclusionary discipline at the hands of a black teacher.
Evidence suggests that White teachers struggle to understand the role that race plays in their interactions with black students. For example, students who engaged in a "stroll" style of walking, more often associated with black movement style, were more likely to be judged by teachers as more aggressive or low-achieving academically.
A journal article I wrote in 2017 explored the exclusionary discipline of black students in New Jersey. My study found that the higher the percentage of black teachers in a school district, the less likely black students were suspended in that school district, whether suspended in-school or out of school.
Hiring black teachers is an immediately tangible way to address the disproportionate exclusionary discipline of Black students. But the work of removing systemic racism in public schooling doesn't end there.
School administrators and governing boards must make it a priority to remove racist (and specifically anti-black) policies in schools, such as zero-tolerance policies responsible for maintaining the school-to-prison pipeline, and replace them with anti-racist policies such as restorative justice.
To be clear, that is what this is about: eradicating racism and anti-blackness in schools.
Public schools are white institutional spaces—social spaces where the demographics and cultural norms privilege whites. Schools devoid of cultural inclusivity reflected within the policies, procedures, curriculum, professional staff, and around the building are schools where knowing better doesn't translate into doing better.
And public schools aren't only white institutional spaces—they are also anti-black spaces.
Black students are more often than not without a black teacher despite the research showing the benefits of to all students of having teachers of color. Textbooks whitewash history by hiding African enslavement and its influence on society. Schools remain named after Confederate soldiers who fought to maintain black enslavement. Black communities are denied local control of their schools by state governments who wrest it away.
This has implications for how black students are treated. They are at times violently beaten and even tased by police in schools. They are told their hairstyles are a distraction in school and will bar them from athletic competitions. The Trump Administration has removed the Obama-era discipline policies that attempted to address the disproportionate disciplining of black children.
Anti-racist work isn't as simple as only hiring black teachers, but hiring black teachers is one concrete way to move this work forward.
Education Racial Justice
Rann Miller
Rann Miller directs the 21st Century Community Learning Center, a federally funded after-school program located in southern New Jersey. He spent 6 years teaching in charter schools in Camden, New Jersey.
Read more by Rann Miller
Hire More Black Teachers?
This article suggests more improvements: provide school choice (such as the academically successful but political unsuccessful) Opportunity Scholarship Program in Washington DC. Also, differentiate child care from education.
Lee Welter 15 days ago


text:
<!DOCTYPE html>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>sentinel降级背后的原理解析 | 拿饭网</title>
<meta name="generator" content="Jekyll v3.9.0" />
<meta property="og:title" content="sentinel降级背后的原理解析" />
<meta name="author" content="张一帆" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="介绍" />
<meta property="og:description" content="介绍" />
<link rel="canonical" href="https://naffan.cn/tech/2020/04/04/01.html" />
<meta property="og:url" content="https://naffan.cn/tech/2020/04/04/01.html" />
<meta property="og:site_name" content="拿饭网" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2020-04-04T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="sentinel降级背后的原理解析" />
<meta name="twitter:site" content="@naffan2011" />
<meta name="twitter:creator" content="@张一帆" />
<meta property="fb:admins" content="张一帆" />
<meta property="article:publisher" content="张一帆" />
<meta property="fb:app_id" content="100002835701051" />

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="shortcut icon" href="https://www.naffan.cn/favicon.ico">
<link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/hc.css" rel="stylesheet">
<link href="/css/highlight/github-gist.css" rel="stylesheet">

 naffan

      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        Toggle navigation

      </button>

拿饭网

技术总结

生活闲杂

沈思默想

经济杂谈

阅读书籍

精彩链接

关于本人

拿饭网

一个属于自己的博客网站

技术总结

生活闲杂

沈思默想

经济杂谈

阅读书籍

精彩链接

关于本人

        <link rel="stylesheet" href="/css/toc.css" type="text/css" media="screen">
<link rel="stylesheet" href="//cdn.bootcss.com/nprogress/0.2.0/nprogress.min.css" type="text/css">

sentinel降级背后的原理解析

			 	张一帆

		  2020年04月04日

目录

              1 介绍

              2 项目结构

              3 运行样例

              4 深入原理

              5 ProcessorSlot是什么

              6 ProcessorSlot 的创建

              7 继续深入原理

              8 责任链是如何执行的

              9 slot的entry()

介绍

  Sentinel是阿里中间件团队开源的,面向分布式服务加购的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。

  首先让我们比对下目前业界流行的熔断降级库Netfilix Hystrix的异同。

项目结构

  这是sentinel项目的整体结构图:

sentinel-core 核心模块,限流、降级、系统保护等都在这里。因为这样可以单独提供sdk。

sentinel-dashboard 控制后台,可以对sentinal客户端进行可视化管理。

sentinel-transport 传输模块,提供基本的监控服务端和客户端的API接口。

sentinel-extension 扩展模块,主要对dataSource进行了部分扩展实现。

sentinel-adapter 适配器模块,主要实现了对一些常见框架的适配。

sentinel-demo 样例,里面教你如何使用限流、降级等。

sentinel-benchmark 基准测试模块,对核心代码的精确性提供基准测试。

运行样例

  在sentinel-demo模块中有很多不同的样例,我们找到FlowQpsDemo,看看限流的样例。限流有很多种类的限流,先找qps限流的类来看。

  /*
有一个TimeTicker线程在做统计,每1秒钟做一次。有N个RunTask线程在模拟请求,被访问的business code被资源key保护着,根据规则,每秒只允许20个请求通过。
*/
public class FlowQpsDemo {

    //key是qps江流的隔离名称
    private static final String KEY = "abc";

    /*
    全局共享三个变量
    使用原子整形类型变量记录通过,拦截及总体数量。
    利用AtomicInteger就是因为原子性的特性,可以帮助我们防止多线程的安全问题。
    */
    private static AtomicInteger pass = new AtomicInteger();
    private static AtomicInteger block = new AtomicInteger();
    private static AtomicInteger total = new AtomicInteger();

    private static volatile boolean stop = false;

    //线程总数
    private static final int threadCount = 32;

    //时间为 100s
    private static int seconds = 60 + 40;

    public static void main(String[] args) throws Exception {
        initFlowQpsRule();

        tick();
        // first make the system run on a very low condition
        simulateTraffic();

        System.out.println("===== begin to do flow control");
        System.out.println("only 20 requests per second can pass");

    }

    /*
    初始化限流规则
    */
    private static void initFlowQpsRule() {
        List<FlowRule> rules = new ArrayList<FlowRule>();
        FlowRule rule1 = new FlowRule();
        rule1.setResource(KEY);
        //设置qps最大值20个
        rule1.setCount(20);
        //设置限流类型:根据qps
        rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
        //需要被限制的应用名称。default代表允许全部应用
        rule1.setLimitApp("default");
        rules.add(rule1);
        FlowRuleManager.loadRules(rules);
    }

    //模拟请求。并发32个线程运行 RunTask()任务
    private static void simulateTraffic() {
        for (int i = 0; i < threadCount; i++) {
            Thread t = new Thread(new RunTask());
            t.setName("simulate-traffic-Task");
            t.start();
        }
    }

    //启动一个线程来运行TimerTask()任务。
    private static void tick() {
        Thread timer = new Thread(new TimerTask());
        timer.setName("sentinel-timer-task");
        timer.start();
    }

    //记录相关事件时间耗时的,tick()调用的所以就运行1次。
    static class TimerTask implements Runnable {

        @Override
        public void run() {
            long start = System.currentTimeMillis();
            System.out.println("begin to statistic!!!");

            long oldTotal = 0;
            long oldPass = 0;
            long oldBlock = 0;
            /*
            循环。

            */
            while (!stop) {
                try {
                    //1秒执行一次
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                }
                //全局总数量
                long globalTotal = total.get();
                //一秒内的全部数量
                long oneSecondTotal = globalTotal - oldTotal;
                //
                oldTotal = globalTotal;

                long globalPass = pass.get();
                //一秒内通过的数量
                long oneSecondPass = globalPass - oldPass;
                oldPass = globalPass;

                long globalBlock = block.get();
                //一秒内拒绝的数量
                long oneSecondBlock = globalBlock - oldBlock;
                oldBlock = globalBlock;

                System.out.println(seconds + " send qps is: " + oneSecondTotal);
                System.out.println(TimeUtil.currentTimeMillis() + ", total:" + oneSecondTotal
                    + ", pass:" + oneSecondPass
                    + ", block:" + oneSecondBlock);
                //当时间耗尽时,停止循环
                if (seconds-- <= 0) {
                    stop = true;
                }
            }
            //整个线程耗时
            long cost = System.currentTimeMillis() - start;
            System.out.println("time cost: " + cost + " ms");
            System.out.println("total:" + total.get() + ", pass:" + pass.get()
                + ", block:" + block.get());
            System.exit(0);
        }
    }

    //
    static class RunTask implements Runnable {
        @Override
        public void run() {
            while (!stop) {
                Entry entry = null;

                try {
                    //进行限流,采用key。因为已经在上面的方法里设置了限流策略了,所以在这个线程中,会自动按照限流策略进行限流的。我们只需要对结果进行监控,然后执行之后逻辑即可。
                    entry = SphU.entry(KEY);
                    // 如果没有抛出异常的话,就说明通过了。就给pass+1
                    pass.addAndGet(1);
                } catch (BlockException e1) {
                    获得了BlockExcepton就给block+1
                    block.incrementAndGet();
                } catch (Exception e2) {
                    // 这个是在业务中抛出了异常了。需要对业务逻辑异常处理
                } finally {
                    //都会走到这里,给total+1
                    total.incrementAndGet();
                    //限流策略退出
                    if (entry != null) {
                        entry.exit();
                    }
                }

                Random random2 = new Random();
                try {
                    //随机睡一会
                    TimeUnit.MILLISECONDS.sleep(random2.nextInt(50));
                } catch (InterruptedException e) {
                    // ignore
                }
            }
        }
    }
}

  运行程序后,结果如下:

  begin to statistic!!!
===== begin to do flow control
only 20 requests per second can pass
100 send qps is: 1125
1621777621479, total:1125, pass:32, block:1093
99 send qps is: 1195
1621777622478, total:1195, pass:20, block:1175
98 send qps is: 1168
1621777623481, total:1168, pass:20, block:1148
97 send qps is: 1198
1621777624481, total:1198, pass:21, block:1177
96 send qps is: 1155
1621777625486, total:1155, pass:20, block:1135
95 send qps is: 1210
1621777626491, total:1210, pass:20, block:1190
94 send qps is: 1163
1621777627495, total:1163, pass:23, block:1140
93 send qps is: 1158
1621777628498, total:1158, pass:20, block:1138

  可以看到,上面的结果中,pass的数量和我们设置的不一样。我们设定的是每秒可以pass的数量是20个。但是有很多的请求都是超过20个的。

  原因是SphU.entry(KEY)的内部是没有加锁的,所以就会在高并发的情况下,pass的数量就会高于20.由于pass、block、total是全局共享的,而多个RunTask()线程在执行SphU.entry(KEY)申请获取entry时,内部没有所保护,所以会存在pass的个数超过设定的阈值。

  接下来,我把threadCount改为1,只有一个线程来执行这个方法,结果如下。

  begin to statistic!!!
===== begin to do flow control
only 20 requests per second can pass
100 send qps is: 36
1621784048375, total:36, pass:26, block:10
99 send qps is: 37
1621784049379, total:37, pass:20, block:17
98 send qps is: 33
1621784050384, total:33, pass:20, block:13
97 send qps is: 39
1621784051389, total:39, pass:20, block:19
96 send qps is: 35
1621784052394, total:35, pass:20, block:15
95 send qps is: 33
1621784053398, total:33, pass:20, block:13

深入原理

  一切的开始让我们从SphU.entry()开始。

  public class SphU {

    ……

    /*
    为给定的resource记录统计数据并且执行方法检查
    */
    public static Entry entry(String name) throws BlockException {
        return Env.sph.entry(name, EntryType.OUT, 1, OBJECTS0);
    }

  /*
sentinel的环境类,这个类会触发所有的sentinel的初始化
这个类有个特殊注意到的地方,为了防止程序上的deadlock。不能让其他的类的静态方法块或者静态变量不要指向这个类。
*/
public class Env {

    //主要是这块代码
    public static final Sph sph = new CtSph();

    static {
        // If init fails, the process will exit.
        InitExecutor.doInit();
    }
}

  SphU.entry中Env是一个类,我们知道在JVM的生命周期里,每个类都会被加载一次,而且加载的原则是懒加载。这个类中有个Sph类型的静态变量,指向了实例化后的CtSph()。也就是说Env.sph.entry()最终是调用了CtsSph.entry()。

  public class CtsSph {

    /*
    检查所有resource的限流规则
    每个唯一的resource会用一个ProcessorSlot做限流检查。同样的resource会用同样的ProcessorSlot。
    注意的是ProcessorSlot总数不能超过配置的MAX_SLOT_CHAIN_SIZE值。否则,所有的限流检查都会终止。也就是说同一时刻的所有请求都会通过,没有任何限流。
    */
    public Entry entry(ResourceWrapper resourceWrapper, int count, Object... args) throws BlockException {
        return entryWithPriority(resourceWrapper, count, false, args);
    }

    /*
    这个方法是具体的实现,也是比较重要的。
    */
    private Entry entryWithPriority(ResourceWrapper resourceWrapper, int count, boolean prioritized, Object... args)
        throws BlockException {

        //获取当前的上线文
        Context context = ContextUtil.getContext();
        if (context instanceof NullContext) {
            // The {@link NullContext} indicates that the amount of context has exceeded the threshold,
            // so here init the entry only. No rule checking will be done.
            //NullContext代表的是上下文数量已经超过了阈值,所以这里初始化CtEntry,就是不会做任何限流检查。
            return new CtEntry(resourceWrapper, null, context);
        }

        //如果没有上下文就给一个默认的上下文。
        if (context == null) {
            // Using default context.
            context = InternalContextUtil.internalEnter(Constants.CONTEXT_DEFAULT_NAME);
        }

        // 开关,可以控制是否做限流检查
        if (!Constants.ON) {
            return new CtEntry(resourceWrapper, null, context);
        }

        //这个比较重要,获取该资源对应的SlotChain
        ProcessorSlot<Object> chain = lookProcessChain(resourceWrapper);

         //slot chain超过了Constants.MAX_SLOT_CHAIN_SIZE。所以就是说没有限流检查
        if (chain == null) {
            return new CtEntry(resourceWrapper, null, context);
        }

        Entry e = new CtEntry(resourceWrapper, chain, context);
        try {
            // 执行Slot的entry方法
            chain.entry(context, resourceWrapper, null, count, prioritized, args);
        } catch (BlockException e1) {
            // 抛出BlockExecption
            e.exit(count, args);
            throw e1;
        } catch (Throwable e1) {
            // This should not happen, unless there are errors existing in Sentinel internal.
            RecordLog.info("Sentinel unexpected exception", e1);
        }
        return e;
    }
}

  这个方法可以分为以下几个部分:

对参数和全局配置做检测,如果不符合要求就返回一个CtEntry对象,不会再进行任何限流检测。否则就会进入检测流程。

根据包装过的资源对象获取对应的SlotChain

执行SlotChain的entry方法,如果抛出了BlockExecption就代表被限流了。如果没有就返回Entry对象

ProcessorSlot是什么

  我们先来看看ProcessorSlot到底是个什么东西。他是一个接口,详细的请看下面的程序解释。

  /*
某些流程的容器,以及流程完成时的通知方式。

直译的话就是处理器插槽,是sentinel实现限流降级、熔断降级、系统自适应降级等功能的切入点。Sentinel 提供的 ProcessorSlot 可以分为两类,一类是辅助完成资源指标数据统计的切入点,一类是实现降级功能的切入点。
*/
public interface ProcessorSlot<T> {

    //slot的入口
    void entry(Context context, ResourceWrapper resourceWrapper, T param, int count, boolean prioritized,
               Object... args) throws Throwable;

     //触发入entry
    void fireEntry(Context context, ResourceWrapper resourceWrapper, Object obj, int count, boolean prioritized,
                   Object... args) throws Throwable;

     //slot的出口
    void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args);

     //触发出entry
    void fireExit(Context context, ResourceWrapper resourceWrapper, int count, Object... args);
}

  通过实现关系,我们可以看到这两类ProcessorSlot分别是:

  辅助资源指标数据统计的 ProcessorSlot:

NodeSelectorSlot:为当前资源创建 DefaultNode

ClusterBuilderSlot:如果当前资源未创建 ClusterNode,则为资源创建 ClusterNode;将 ClusterNode 赋值给当前资源的 DefaultNode.clusterNode;如果调用来源(origin)不为空,则为调用来源创建 StatisticNode,用于实现按调用来源统计资源的指标数据,ClusterNode 持有每个调用来源的 StatisticNode。

StatisticSlot:这是 Sentinel 最为重要的类之一,用于实现指标数据统计。先是调用后续的 ProcessorSlot#entry 判断是否放行请求,再根据判断结果进行相应的指标数据统计操作。

  实现降级功能的 ProcessorSlot:

AuthoritySlot:实现黑白名单降级

SystemSlot:实现系统自适应降级

FlowSlot:实现限流降级

DegradeSlot:实现熔断降级

ProcessorSlot 的创建

  然后我们看看是如何将ProcessorSlot创建成链的:

   //通过slot chain builder SPI提供的创建slot链的类
public final class SlotChainProvider {

    private static volatile SlotChainBuilder slotChainBuilder = null;

     /*
     加载和选择进程不是线程安全的,但是如果只是通过lookProcessChain()方法调用就可以,因为CtSph是带锁的。一会就能看到lookProcessChain这个方法了。这个方法是有synchronized的。
     */
    public static ProcessorSlotChain newSlotChain() {
        if (slotChainBuilder != null) {
            return slotChainBuilder.build();
        }

        //通过chain builder的SPI来实现代码和业务的隔离,也就是说通过配置文件来选择可用的builder.以此builder来创建ProcessorSlotChain
        slotChainBuilder = SpiLoader.of(SlotChainBuilder.class).loadFirstInstanceOrDefault();

        if (slotChainBuilder == null) {
            // Should not go through here.
            //一般来说不应该为null,因为作者已经预留了文件在resources的META-INF中。但是为了万一,还是判断一下,给出个解决方案。
            RecordLog.warn("[SlotChainProvider] Wrong state when resolving slot chain builder, using default");
            slotChainBuilder = new DefaultSlotChainBuilder();
        } else {
            RecordLog.info("[SlotChainProvider] Global slot chain builder resolved: {}",
                slotChainBuilder.getClass().getCanonicalName());
        }
        //返回,用选择的builder调用build方法,创建ProcessorSlotChain
        return slotChainBuilder.build();
    }

    private SlotChainProvider() {}
}

  我很感兴趣slotChainBuilder,于是就去看了眼这个类。其实他是一个接口,接口中就一个build()方法。目前系统提供了两种实现,一个是DefaultSlotChainBuilder,一个是DemoSlotChainBuilder。这块对后续的增加留下了扩展性。主要体现的是建造者模式思想。

  public interface SlotChainBuilder {

     //构造 processor slot chain
    ProcessorSlotChain build();
}

  那接下来我选择DemoSlotChainBuilder看下怎么实现的。

  /*
一个例子来讲述如何自定义建造一个slot chain
*/
@Spi
public class DemoSlotChainBuilder implements SlotChainBuilder {

    @Override
    public ProcessorSlotChain build() {

        ProcessorSlotChain chain = new DefaultProcessorSlotChain();

        List<ProcessorSlot> sortedSlotList = SpiLoader.of(ProcessorSlot.class).loadInstanceListSorted();
        // 过滤掉降级
        //demo不会被降级异常阻塞的
        sortedSlotList.removeIf(o -> DegradeSlot.class.equals(o.getClass()));
        for (ProcessorSlot slot : sortedSlotList) {
            if (!(slot instanceof AbstractLinkedProcessorSlot)) {
                RecordLog.warn("The ProcessorSlot(" + slot.getClass().getCanonicalName() + ") is not an instance of AbstractLinkedProcessorSlot, can't be added into ProcessorSlotChain");
                continue;
            }

            chain.addLast((AbstractLinkedProcessorSlot<?>) slot);
        }

        return chain;
    }
}

  通过上面的演示,就创建除了一个slot chain了。返回的就是ProcessorSlotChain。

继续深入原理

//chanMap是一个原子map,map的key是ResourceWrapper封装类,value是ProcessorSlotChain
private static volatile Map<ResourceWrapper, ProcessorSlotChain> chainMap
        = new HashMap<ResourceWrapper, ProcessorSlotChain>();

/*
获取当前资源的ProcessorSlotChain,如果没有的话就创建一个ProcessorSlotChain出来
同样的资源只要ResourceWrapper.equals(Object)相等,不论在不在同一个上下文中,都会全局共享同一个ProcessorSlotChain。
还有就是ProcessorSlot的总数不能超过Constants#MAX_SLOT_CHAIN_SIZE否则会返回null
*/
ProcessorSlot<Object> lookProcessChain(ResourceWrapper resourceWrapper) {
        //获取单向链表中的ProcessorSlotChain
        ProcessorSlotChain chain = chainMap.get(resourceWrapper);
        //chain是空的则进入,不为空就直接返回呗
        if (chain == null) {
            //这个就是刚才我在SlotChainProvider()方法中提到的。获取的话一定在lookProcessChain()中,因为有锁就保证了线程安全。
            synchronized (LOCK) {
                chain = chainMap.get(resourceWrapper);
                //double check。因为在锁里了。在之前查到现在查的时间内,有可能加锁前chain被别的线程注入了,那这块就可能出问题的。
                if (chain == null) {
                    // 超过预设值了,返回null吧。
                    if (chainMap.size() >= Constants.MAX_SLOT_CHAIN_SIZE) {
                        return null;
                    }

                    //刚才已经分析过了是如何创建slot chain的了。但是我只是用了demoSlotBuilder讲的。这块因为是用默认的DefaultSlotChainBuilder。所以我还得贴一下DefaultSlotChainBuilder的代码在下面
                    chain = SlotChainProvider.newSlotChain();
                    Map<ResourceWrapper, ProcessorSlotChain> newMap = new HashMap<ResourceWrapper, ProcessorSlotChain>(
                        chainMap.size() + 1);
                    newMap.putAll(chainMap);
                    newMap.put(resourceWrapper, chain);
                    chainMap = newMap;
                }
            }
        }
        return chain;
    }

  //默认的构建slot chain的建造者。请关注其中的SPI。
@Spi(isDefault = true)
public class DefaultSlotChainBuilder implements SlotChainBuilder {

    @Override
    public ProcessorSlotChain build() {
        ProcessorSlotChain chain = new DefaultProcessorSlotChain();
        //采用SPI,那就看看META-INF中规定的processorSlot,看看有几种规则吧。贴在下面了
        List<ProcessorSlot> sortedSlotList = SpiLoader.of(ProcessorSlot.class).loadInstanceListSorted();
        //通过下面的列表我们知道了chain中依次加入了很多slot
        for (ProcessorSlot slot : sortedSlotList) {
            if (!(slot instanceof AbstractLinkedProcessorSlot)) {
                RecordLog.warn("The ProcessorSlot(" + slot.getClass().getCanonicalName() + ") is not an instance of AbstractLinkedProcessorSlot, can't be added into ProcessorSlotChain");
                continue;
            }
            //DefaultProcessorSlotChain中的addLast
            chain.addLast((AbstractLinkedProcessorSlot<?>) slot);
        }

        return chain;
    }
}

  //文件名:sentinel/sentinel-core/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.slotchain.ProcessorSlot

# Sentinel default ProcessorSlots
com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot
com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot
com.alibaba.csp.sentinel.slots.logger.LogSlot
com.alibaba.csp.sentinel.slots.statistic.StatisticSlot
com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot
com.alibaba.csp.sentinel.slots.system.SystemSlot
com.alibaba.csp.sentinel.slots.block.flow.FlowSlot
com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot

  以上的这些slot已经被依次添加到了chain中了。然后调用DefaultProcessorSlotChain中的addLast完成责任链的创建。

  /*
DefaultProcessorSlotChain的实现。他继承了ProcessorSlotChain,继承了AbstractLinkedProcessorSlot实现了ProcessorSlot。
这一大坨的继承关系。其实仔细想想,也能明白。一个好的程序继承关系最多也就5层。不能再高了。再高了就不是一个好的设计方式了。
ProcessorSlotChain是一个抽象类,比继承的对象多了两个方法,addFirst()和addLast()。这两个方法必须在继承类中具体实现。
*/
public class DefaultProcessorSlotChain extends ProcessorSlotChain {

    /*
    构造了一个first节点。并且重写了entry和exit方法。
    注意,这个变量指向的是他的父亲
    */
    AbstractLinkedProcessorSlot<?> first = new AbstractLinkedProcessorSlot<Object>() {

        @Override
        public void entry(Context context, ResourceWrapper resourceWrapper, Object t, int count, boolean prioritized, Object... args)
            throws Throwable {
            //调用父亲的fireEntry()。这个方法会在真正进入entry时触发。是由first节点进行触发。
            super.fireEntry(context, resourceWrapper, t, count, prioritized, args);
        }

        @Override
        public void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args) {
            //调用父亲的fireExit()
            super.fireExit(context, resourceWrapper, count, args);
        }

    };

    //同理,构造一个end节点,初始值和first指向一致,下面有图。
    AbstractLinkedProcessorSlot<?> end = first;

    @Override
    public void addFirst(AbstractLinkedProcessorSlot<?> protocolProcessor) {
        protocolProcessor.setNext(first.getNext());
        first.setNext(protocolProcessor);
        if (end == first) {
            end = protocolProcessor;
        }
    }

    /*
    插入到链表中,从链表尾开始插。
    注意,一个是赋值模型的next值。 一个是更新变量的引用。
    */
    @Override
    public void addLast(AbstractLinkedProcessorSlot<?> protocolProcessor) {
        //end的下一个节点指向变量传进来的slot。也就是first也指向了这个slot。注意这里的setNext方法。
        end.setNext(protocolProcessor);
        //end的指向更新,指向了新的slot
        end = protocolProcessor;
    }

    /*
    这个是这个方法的setNext。父类也有一个setNext。
    像上面end.setNext()其实是调用的父亲的setNExt()。不是这个方法。
    只有 this.setNext()或者setNext()才是用的这个方法。
    */
    @Override
    public void setNext(AbstractLinkedProcessorSlot<?> next) {
        addLast(next);
    }

    …………

}

  DefaultProcessorSlotChain中有两个AbstractLinkedProcessorSlot类型的变量:first和end,这就是链表的头结点和尾节点。

  创建DefaultProcessorSlotChain对象时,首先创建了首节点,然后把首节点赋值给了尾节点,可以用下图表示:

  当把第一个slot(NodeSelectorSlot)添加(chain.addLast())到联表中。是这样的:

  将所有的节点都加入到联表中后,整个联表的结构变成了如下图所示:

  样就将所有的Slot对象添加到了链表中去了,每一个Slot都是继承自AbstractLinkedProcessorSlot。而AbstractLinkedProcessorSlot是一种责任链的设计,每个对象中都有一个next属性,指向的是另一个AbstractLinkedProcessorSlot对象。其实责任链模式在很多框架中都有,比如Netty中是通过pipeline来实现的。

  知道了SlotChain是如何创建的了,那接下来就要看下是如何执行Slot的entry方法的了。

责任链是如何执行的

  回看entryWithPriority()方法。在创建玩成chain后。调用了这个方法:

  chain.entry(context, resourceWrapper, null, count, prioritized, args);

  这个方法最终调用的是

   public class DefaultProcessorSlotChain extends ProcessorSlotChain {

    …………

    //其实这个方法最终调用的是first的transformEntry()
    @Override
    public void entry(Context context, ResourceWrapper resourceWrapper, Object t, int count, boolean prioritized, Object... args)
        throws Throwable {
        first.transformEntry(context, resourceWrapper, t, count, prioritized, args);
    }

    …………
}

  也就是说,DefaultProcessorSlotChain的entry实际是执行的first属性的transformEntry方法。

  而transformEntry方法会执行当前节点的entry方法,在DefaultProcessorSlotChain中first节点重写了entry方法,具体如下:

  public class DefaultProcessorSlotChain extends ProcessorSlotChain {
        @Override
        public void entry(Context context, ResourceWrapper resourceWrapper, Object t, int count, boolean prioritized, Object... args)
            throws Throwable {
            super.fireEntry(context, resourceWrapper, t, count, prioritized, args);
        }
}

  我们看到,实际entry()又执行了super的fireEntry()。

  public abstract class AbstractLinkedProcessorSlot<T> implements ProcessorSlot<T> {

    @Override
    public void fireEntry(Context context, ResourceWrapper resourceWrapper, Object obj, int count, boolean prioritized, Object... args)
        throws Throwable {
        if (next != null) {
            //这个next指的就是下一个slot
            next.transformEntry(context, resourceWrapper, obj, count, prioritized, args);
        }
    }
}

  从这里看到,从fireEntry()中就开始传递执行entry了,这里会执行当前节点的下一个节点的transformEntry()。上面已经分析过了,transformEntry方法会触发当前节点的entry,也就是说fireEntry方法实际是触发了下一个节点的entry方法。具体的流程如下图所示:

  那责任链开始传递了,每次传递到的slot都会运行entry()。我们应该将目光看看entry()的实现了。

slot的entry()

  从上面得知,链表中在第一个位置的是NodeSelectorSlot。

  @Spi(isSingleton = false, order = Constants.ORDER_NODE_SELECTOR_SLOT)
public class NodeSelectorSlot extends AbstractLinkedProcessorSlot<Object> {

    /**
     * {@link DefaultNode}s of the same resource in different context.
     */
    private volatile Map<String, DefaultNode> map = new HashMap<String, DefaultNode>(10);

    //关注这里。实际上调用的方法。 这个entry()方法的内部逻辑
    @Override
    public void entry(Context context, ResourceWrapper resourceWrapper, Object obj, int count, boolean prioritized, Object... args)
        throws Throwable {
        /*
         * It's interesting that we use context name rather resource name as the map key.
         *
         * Remember that same resource({@link ResourceWrapper#equals(Object)}) will share
         * the same {@link ProcessorSlotChain} globally, no matter in which context. So if
         * code goes into {@link #entry(Context, ResourceWrapper, DefaultNode, int, Object...)},
         * the resource name must be same but context name may not.
         *
         * If we use {@link com.alibaba.csp.sentinel.SphU#entry(String resource)} to
         * enter same resource in different context, using context name as map key can
         * distinguish the same resource. In this case, multiple {@link DefaultNode}s will be created
         * of the same resource name, for every distinct context (different context name) each.
         *
         * Consider another question. One resource may have multiple {@link DefaultNode},
         * so what is the fastest way to get total statistics of the same resource?
         * The answer is all {@link DefaultNode}s with same resource name share one
         * {@link ClusterNode}. See {@link ClusterBuilderSlot} for detail.
         */
        DefaultNode node = map.get(context.getName());
        if (node == null) {
            synchronized (this) {
                node = map.get(context.getName());
                if (node == null) {
                    node = new DefaultNode(resourceWrapper, null);
                    HashMap<String, DefaultNode> cacheMap = new HashMap<String, DefaultNode>(map.size());
                    cacheMap.putAll(map);
                    cacheMap.put(context.getName(), node);
                    map = cacheMap;
                    // Build invocation tree
                    ((DefaultNode) context.getLastNode()).addChild(node);
                }

            }
        }
        context.setCurNode(node);
        //调用下一个节点的entry()
        fireEntry(context, resourceWrapper, node, count, prioritized, args);
    }

    @Override
    public void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args) {
        fireExit(context, resourceWrapper, count, args);
    }
}

  执行完业务逻辑处理后,调用了fireEntry()方法,由此触发了下一个节点的entry方法。此时我们就知道了sentinel的责任链就是这样传递的:每个Slot节点执行完自己的业务后,会调用fireEntry来触发下一个节点的entry方法。因为每个slot的逻辑都不太一样,所以这里就不展开了,我将来会写每个slot的分析的。

  至此就通过SlotChain完成了对每个节点的entry()方法的调用,每个节点会根据创建的规则,进行自己的逻辑处理,当统计的结果达到设置的阈值时,就会触发限流、降级等事件,具体是抛出BlockException异常。

本文参考:

Sentinel原理:全解析

Sentinel 与 Hystrix 的对比

ProcessorSlotChain-sentinel中的责任链模式

← 前一篇

后一篇 →

      © 2021 拿饭网 ·
       ·
      京ICP备16029491号-4

redpajama_set_name: RedPajamaGithub


text:
Sergei Wassiljewitsch Ladygin (; * 23. März 1967 in Belgorod, Sowjetunion) ist ein russischer Handballtrainer und ehemaliger Handballspieler.

Karriere

Verein
Sergei Ladygin lernte das Handballspielen in der Schule. Bereits mit 16 Jahren zog er von Belgorod nach Krasnodar, um mit der russischen Nationalmannschaft zu trainieren und an der Völker-Spartakiade teilzunehmen. Mit der Studentenauswahl der Russischen Sozialistischen Föderativen Sowjetrepublik wurde er 1990 Studentenweltmeister. Mit SKIF Krasnodar wurde der linke Rückraumspieler 1989 und 1990 Dritter der sowjetischen Meisterschaft. 1990 gewann Krasnodar um Torwart Andrei Lawrow und Spielmacher Dmitri Karlow den IHF-Pokal. 1991 wurde das Team Meister der Sowjetunion, 1992 Meister der Gemeinschaft Unabhängiger Staaten (GUS).

Anschließend wechselte der sowjetische Nationalspieler zum deutschen Bundesligisten TSV Milbertshofen, bei dem sein Nationalmannschaftsmitspieler Waleri Sawko und der ehemalige sowjetische Nationaltrainer Anatoli Jewtuschenko angestellt waren. Nach dem Konkurs des TSV im Sommer 1993 ging er zum spanischen Erstligisten CBM Gáldar, wo mit Juryj Karpuk und Andrei Paraschtschenko zwei weitere ehemalige Auswahlspieler unter Vertrag standen. 1994 verließ er Spanien. In der Saison 1997/98 lief er gemeinsam mit Karpuk und Oleg Sawtschuk für den deutschen Süd-Regionalligisten TuS Wörrstadt auf. In der Saison 1998/99 spielte er beim Nord-Regionalligisten Wilhelmshavener HV. In Rothenburg ob der Tauber (Regionalliga) und Marktsteft (Bezirksoberliga) ließ er seine Karriere als Spielertrainer ausklingen. Ab 2007 arbeitete Ladygin als Jugendkoordinator.

2012 kehrte er nach Krasnodar zurück, wo er an der örtlichen Sportschule arbeitete. Zudem wurde er Assistenztrainer von Dmitri Karlow bei SKIF. Von Oktober 2014 bis Februar 2015 war er dort Cheftrainer. Seit September 2022 trainiert er gemeinsam mit Witali Krochin den russischen Erstligisten GK Taganrog.

Sein Sohn Ilya (* 1988) spielte unter anderem für den TV 1861 Marktsteft und den HC Aschersleben.

Einzelnachweise

Handballtrainer (SKIF Krasnodar)
Handballtrainer (Deutschland)
Handballnationalspieler (Sowjetunion)
Handballspieler (SKIF Krasnodar)
Handballspieler (Spanien)
Handballspieler (Wilhelmshavener HV)
Sowjetischer Meister (Handball)
Rückraumspieler
Sowjetbürger
Russe
Geboren 1967
Mann

redpajama_set_name: RedPajamaWikipedia


text:
Transitional Health Services of Kannapolis Center Abuse and Neglect Lawyers
Are you concerned that caregivers at the Cabarrus County nursing facility have victimized your loved one through negligence and mistreatment? Do you suspect they have been physically, mentally, emotionally, or sexually assaulted by the nursing staff, visitors, or other patients?
Contact the North Carolina Nursing Home Law Center attorneys now for immediate legal intervention. Our team of abuse prevention lawyers will use the law to obtain financial compensation on your family's behalf.
Transitional Health Services of Kannapolis Center
This facility is a 107-certified bed "for-profit" long-term care home providing services and cares to residents of Kannapolis and Cabarrus County, North Carolina. The Medicare and Medicaid-participating center is located at:
1810 Concord Lake Road
Kannapolis, North Carolina 28083
In addition to providing 24/7 skilled nursing care, Transitional Health Services of Kannapolis Center offers other services. Additional focused care includes short-term and long term care.
The facility also provides comprehensive rehab services, wound care, assisted and independent living options, medically-complex care, respiratory care, bariatric care, pulmonary care, IV (intervenous) care, post-stroke care, enteral nutrition, pain management, hospice, oncology care, dementia and memory care, and physical, occupational, and speech therapies.
Both the state of North Carolina and federal agencies penalize nursing homes by denying reimbursement payments from Medicare or imposing monetary fines anytime the facility is cited for a serious violation of established regulations and rules that harm or could harm residents.
Within the last three years, investigators imposed two monetary penalties against Transitional Health Services of Kannapolis Center, citing substandard care. These penalties include a $2,600 fine on January 24, 2018, and a $77,386 fine on March 03, 2017, for a total of $79,986. During this time, Medicare denied payment on March 03, 2017, due to a lack of quality care.
The nursing home received seven complaints over the last three years that resulted in a violation citation. Additional information concerning the facility can be reviewed on the State of North Carolina Department of Health and Human Services (Adult Protective Services) Website.
Kannapolis North Carolina Nursing Home Safety Concerns
The state of North Carolina and Medicare.com routinely update their comprehensive list of deficiencies online to reflect all violations
According to Medicare, this facility maintains an overall rating of two out of five stars, including one out of five stars concerning health inspections, one out of five stars for staffing issues and five out of five stars for quality measures.
The state investigators determined that the nursing home "failed to implement or follow the Abuse Policy in the area of reporting [for a resident] who had an allegation of abuse." The investigation involved a resident who "had one fall with no injuries since his last MDS (Minimum Data Set) Assessment" who received "antipsychotic medications, anti-anxiety medications, and antidepressant medications each day."
A handwritten note from the Evening Supervisor dated January 15, 2018, revealed that a family member of the resident "had come to the facility at approximately 11:05 PM." The note indicated that the family member had informed the Evening Supervisor that "she planned to meet with the Administrator in the morning to inform her that she had been informed [that a Nursing Aide] had been mean to [the resident] and had hit him."
The Evening Supervisor then documented that she had removed the Nurse Aide from the assignment of the resident "for that night. She then documented her interviews with two nurses in which both nurses stated that [the resident] had had behaviors and had felt it may have been related to a recent medication dose reduction."
The Team Supervisor stated that a specific Nurse Aide "was working at the facility at the time the allegation was made and had been assigned to [the resident]. The Evening Supervisor stated that [the Nurse Aide] denied having abused the resident, but she had not had an in-depth conversation with her about the allegation. She stated she changed [the Nurse Aide's] assignment so she would not be responsible for care for [that resident]."
However, the Nurse Aide "remained working in the facility." Both the Administrator and the Director of Nursing revealed that "they had received the information regarding the allegation involving [the resident and the Nurse Aide]."
Ready to File a Nursing Home Neglect Claim Against Transitional Health Services of Kannapolis Center? Let Us Help
Do you suspect that your loved one is the victim of abuse, neglect, or mistreatment while residing at Transitional Health Services of Kannapolis Center? Contact the North Carolina nursing home abuse prevention lawyers at Nursing Home Law Center at (800) 926-7565 for immediate legal intervention. We represent Cabarrus County victims of abuse and neglect in all areas, including Kannapolis.