text:
Most Popular Investigator Movies and TV Shows
Feature Film (707)
TV Episode (61)
Crime (460) Drama (426) Mystery (285) Thriller (230) Action (229) Romance (209) Adventure (185) Comedy (182) Western (133) Horror (78) Short (56) Film-Noir (54) Music (48) Sci-Fi (36) Documentary (29) Family (21) Fantasy (21) War (18) History (17) Animation (13) Biography (12) Musical (10) News (5) Sport (5) Talk-Show (5) Reality-Tv (2)
Investigation (650)
Detective (316)
B Movie (278)
Damsel In Distress (251)
Henchman (245)
Stock Footage (235)
Gang Member (185)
Policeman (177)
Gang Leader (176)
Police Detective (171)
Gunfire (145)
Evidence (127)
Slang (126)
Singer (119)
New York City (113)
Bartender (112)
Male Female Relationship (109)
Police Investigation (107)
Newspaper (106)
Gangster (102)
Low Budget Film (102)
Reporter (92)
Frame Up (90)
Suspect (88)
Archive Footage (85)
Interrogation (85)
Murder Investigation (84)
Corpse (83)
Singing (83)
Newspaper Reporter (81)
Private Detective (81)
Crying (80)
Police Station (80)
Dead Body (79)
Character Name In Title (78)
Double Cross (78)
Police Investigator (78)
Witness (78)
Blackmail (76)
False Accusation (76)
Newspaper Story (75)
Rescue (75)
Jealousy (74)
Suspicion (73)
Boyfriend Girlfriend Relationship (72)
Drinking (72)
Nightclub (72)
Arrest (71)
Police Car (70)
Drunkenness (68)
Judge (68)
Mother Daughter Relationship (67)
Police Inspector (66)
B Western (65)
Female Nudity (65)
Grindhouse Film (65)
Prime Video (90)
1 to 50 of 947 titles | Next »
1. Missing Link (2019)
PG | 94 min | Animation, Adventure, Comedy
Mr. Link recruits explorer Sir Lionel Frost to help find his long-lost relatives in the fabled valley of Shangri-La. Along with adventurer Adelina Fortnight, this trio of explorers travel the world to help their new friend.
Director: Chris Butler | Stars: Hugh Jackman, David Walliams, Stephen Fry, Matt Lucas
Votes: 4,436 | Gross: $16.65M
2. Bones (2005–2017)
TV-14 | 40 min | Comedy, Crime, Drama
Forensic anthropologist Dr. Temperance "Bones" Brennan and cocky F.B.I. Special Agent Seeley Booth build a team to investigate murders. Quite often, there isn't more to examine than rotten flesh or mere bones.
Stars: Emily Deschanel, David Boreanaz, Michaela Conlin, T.J. Thyne
3. The Nun (2018)
R | 96 min | Horror, Mystery, Thriller
A priest with a haunted past and a novice on the threshold of her final vows are sent by the Vatican to investigate the death of a young nun in Romania and confront a malevolent force in the form of a demonic nun.
Director: Corin Hardy | Stars: Demián Bichir, Taissa Farmiga, Jonas Bloquet, Bonnie Aarons
Votes: 93,203 | Gross: $117.44M
4. The Good Wife (2009–2016)
TV-14 | 43 min | Crime, Drama, Mystery
Alicia has been a good wife to her husband, a former state's attorney. After a very humiliating sex and corruption scandal, he is behind bars. She must now provide for her family and returns to work as a litigator in a law firm.
Stars: Julianna Margulies, Chris Noth, Josh Charles, Matt Czuchry
5. Taboo (2017– )
TV-MA | 59 min | Drama, Mystery, Thriller
Adventurer James Keziah Delaney returns to London during the War of 1812 to rebuild his late father's shipping empire. However, both the government and his biggest competitor want his inheritance at any cost - even murder.
Stars: Tom Hardy, David Hayman, Jonathan Pryce, Oona Chaplin
6. Annabelle (I) (2014)
A couple begins to experience terrifying supernatural occurrences involving a vintage doll shortly after their home is invaded by satanic cultists.
Director: John R. Leonetti | Stars: Ward Horton, Annabelle Wallis, Alfre Woodard, Tony Amendola
7. CSI: Crime Scene Investigation (2000–2015)
An elite team of police forensic evidence investigation experts work their cases in Las Vegas.
Stars: Laurence Fishburne, Marg Helgenberger, George Eads, Eric Szmanda
8. Shutter Island (2010)
R | 138 min | Mystery, Thriller
In 1954, a U.S. Marshal investigates the disappearance of a murderer, who escaped from a hospital for the criminally insane.
Director: Martin Scorsese | Stars: Leonardo DiCaprio, Emily Mortimer, Mark Ruffalo, Ben Kingsley
9. Perry Mason (1957–1966)
TV-PG | 60 min | Crime, Drama, Mystery
The cases of a master criminal defense attorney, handling the most difficult of cases in the aid of the innocent.
Stars: Raymond Burr, Barbara Hale, William Hopper, Ray Collins
10. The Tattooed Stranger (1950)
Passed | 64 min | Crime, Drama, Film-Noir
Early one morning in a New York City park, a passerby walking his dog discovers who ends up being a Jane Doe shot dead in the front passenger seat of a parked car. Homicide Chief Captain ... See full summary »
Director: Edward Montagne | Stars: John Miles, Patricia Barry, Walter Kinsella, Frank Tweddell
11. The Girl with the Dragon Tattoo (2011)
R | 158 min | Crime, Drama, Mystery
Journalist Mikael Blomkvist is aided in his search for a woman who has been missing for forty years by Lisbeth Salander, a young computer hacker.
Director: David Fincher | Stars: Daniel Craig, Rooney Mara, Christopher Plummer, Stellan Skarsgård
12. Fantastic Beasts and Where to Find Them (2016)
PG-13 | 132 min | Adventure, Family, Fantasy
The adventures of writer Newt Scamander in New York's secret community of witches and wizards seventy years before Harry Potter reads his book in school.
Director: David Yates | Stars: Eddie Redmayne, Katherine Waterston, Alison Sudol, Dan Fogler
13. Kindergarten Cop (1990)
PG-13 | 111 min | Comedy, Crime
A tough cop must pose as a kindergarten teacher in order to locate a dangerous criminal's ex-wife, who may hold the key to putting him behind bars.
Director: Ivan Reitman | Stars: Arnold Schwarzenegger, Penelope Ann Miller, Pamela Reed, Linda Hunt
14. Gattaca (1997)
PG-13 | 106 min | Drama, Sci-Fi, Thriller
A genetically inferior man assumes the identity of a superior one in order to pursue his lifelong dream of space travel.
Director: Andrew Niccol | Stars: Ethan Hawke, Uma Thurman, Jude Law, Gore Vidal
15. CSI: NY (2004–2013)
TV-14 | 43 min | Action, Crime, Drama
CSI head Detective Mac Taylor and his team solve crimes in New York City.
Stars: Gary Sinise, Carmine Giovinazzo, Hill Harper, Eddie Cahill
17. The Talented Mr. Ripley (1999)
In late 1950s New York, Tom Ripley, a young underachiever, is sent to Italy to retrieve Dickie Greenleaf, a rich and spoiled millionaire playboy. But when the errand fails, Ripley takes extreme measures.
Director: Anthony Minghella | Stars: Matt Damon, Gwyneth Paltrow, Jude Law, Cate Blanchett
18. Original Sin (2001)
R | 116 min | Drama, Mystery, Romance
A woman, along with her lover, plans to con a rich man by marrying him, earning his trust, and then running away with all his money. Everything goes as planned until she falls in love with him.
Director: Michael Cristofer | Stars: Antonio Banderas, Angelina Jolie, Thomas Jane, Jack Thompson
19. Who Framed Roger Rabbit (1988)
PG | 104 min | Animation, Adventure, Comedy
A toon-hating detective is a cartoon rabbit's only hope to prove his innocence when he is accused of murder.
Director: Robert Zemeckis | Stars: Bob Hoskins, Christopher Lloyd, Joanna Cassidy, Charles Fleischer
20. Fracture (2007)
An attorney intent on climbing the career ladder toward success, finds an unlikely opponent in a manipulative criminal he is trying to prosecute.
Director: Gregory Hoblit | Stars: Anthony Hopkins, Ryan Gosling, David Strathairn, Rosamund Pike
21. The Firm (1993)
A young lawyer joins a prestigious law firm only to discover that it has a sinister dark side.
Director: Sydney Pollack | Stars: Tom Cruise, Jeanne Tripplehorn, Gene Hackman, Hal Holbrook
22. Angels & Demons (2009)
PG-13 | 138 min | Mystery, Thriller
Harvard symbologist Robert Langdon works with a nuclear physicist to solve a murder and prevent a terrorist act against the Vatican during one of the significant events within the church.
Director: Ron Howard | Stars: Tom Hanks, Ewan McGregor, Ayelet Zurer, Stellan Skarsgård
23. The Frozen Ground (2013)
An Alaska State Trooper partners with a young woman who escaped the clutches of serial killer Robert Hansen to bring the murderer to justice. Based on actual events.
Director: Scott Walker | Stars: Nicolas Cage, Vanessa Hudgens, John Cusack, Dean Norris
24. Splash (1984)
PG | 111 min | Comedy, Fantasy, Romance
A young man is reunited with a mermaid who saved him from drowning as a boy. He falls in love with her, not knowing who or what she is.
Director: Ron Howard | Stars: Tom Hanks, Daryl Hannah, Eugene Levy, John Candy
25. Exposed (III) (2016)
A police detective investigates the truth behind his partner's death. The mysterious case reveals disturbing police corruption and a dangerous secret involving an unlikely young woman.
Director: Gee Malik Linton | Stars: Ana de Armas, Keanu Reeves, Christopher McDonald, Mira Sorvino
26. Mortdecai (2015)
Juggling angry Russians, the British Mi5, and an international terrorist, debonair art dealer and part-time rogue Charlie Mortdecai races to recover a stolen painting rumored to contain a code that leads to lost gold.
Director: David Koepp | Stars: Johnny Depp, Gwyneth Paltrow, Ewan McGregor, Olivia Munn
27. Secret Window (2004)
PG-13 | 96 min | Drama, Mystery, Thriller
A successful writer in the midst of a painful divorce is stalked at his remote lake house by a would-be scribe who accuses him of plagiarism.
Director: David Koepp | Stars: Johnny Depp, Maria Bello, John Turturro, Timothy Hutton
28. Twin Peaks: Fire Walk with Me (1992)
R | 134 min | Drama, Horror, Mystery
A young FBI agent disappears while investigating a murder miles from Twin Peaks that may be related to the future murder of Laura Palmer; the last week of the life of Laura Palmer is chronicled.
Director: David Lynch | Stars: Sheryl Lee, Ray Wise, Mädchen Amick, Dana Ashbrook
29. The Boondock Saints (1999)
R | 108 min | Action, Crime, Thriller
Two Irish Catholic brothers become vigilantes and wipe out Boston's criminal underworld in the name of God.
Director: Troy Duffy | Stars: Willem Dafoe, Sean Patrick Flanery, Norman Reedus, David Della Rocco
30. Sea of Love (1989)
A detective investigating a series of murders becomes involved with a woman who may be the culprit.
Director: Harold Becker | Stars: Al Pacino, Ellen Barkin, John Goodman, Michael Rooker
31. Angel Heart (1987)
R | 113 min | Horror, Mystery, Thriller
A private investigator is hired by a man who calls himself Louis Cyphre to track down a singer named Johnny Favorite. But the investigation takes an unexpected and somber turn.
Director: Alan Parker | Stars: Mickey Rourke, Robert De Niro, Lisa Bonet, Charlotte Rampling
32. Dark Places (2015)
Libby Day was only eight years old when her family was brutally murdered in their rural Kansas farmhouse. Almost thirty years later, she reluctantly agrees to revisit the crime and uncovers the wrenching truths that led up to that tragic night.
Director: Gilles Paquet-Brenner | Stars: Charlize Theron, Nicholas Hoult, Christina Hendricks, Chloë Grace Moretz
33. Secret in Their Eyes (2015)
PG-13 | 111 min | Crime, Drama, Mystery
A tight-knit team of rising investigators, along with their supervisor, is suddenly torn apart when they discover that one of their own teenage daughters has been brutally murdered.
Director: Billy Ray | Stars: Chiwetel Ejiofor, Nicole Kidman, Julia Roberts, Dean Norris
34. The Adventures of Tintin (2011)
PG | 107 min | Animation, Action, Adventure
Intrepid reporter Tintin and Captain Haddock set off on a treasure hunt for a sunken ship commanded by Haddock's ancestor.
Director: Steven Spielberg | Stars: Jamie Bell, Andy Serkis, Daniel Craig, Simon Pegg
35. What We Did on Our Holiday (2014)
PG-13 | 95 min | Comedy, Drama
Doug and Abi take their kids on a family vacation. Surrounded by relatives, the kids innocently reveal the ins and outs of their family life and many intimate details about their parents. ... See full summary »
Directors: Andy Hamilton, Guy Jenkin | Stars: Rosamund Pike, David Tennant, Billy Connolly, Ben Miller
PG-13 | 104 min | Drama, Horror, Mystery
A man who specialises in debunking paranormal occurrences checks into the fabled room 1408 in the Dolphin Hotel. Soon after settling in, he confronts genuine terror.
Director: Mikael Håfström | Stars: John Cusack, Samuel L. Jackson, Mary McCormack, Tony Shalhoub
37. Child 44 (2015)
R | 137 min | Crime, Drama, History
A disgraced member of the Russian military police investigates a series of child murders during the Stalin-era Soviet Union.
Director: Daniel Espinosa | Stars: Tom Hardy, Gary Oldman, Noomi Rapace, Joel Kinnaman
38. Presumed Innocent (1990)
As a lawyer investigates the murder of a colleague, he finds himself more connected to the crime than anyone else.
Director: Alan J. Pakula | Stars: Harrison Ford, Raul Julia, Greta Scacchi, Brian Dennehy
39. The Hidden Face (2011)
R | 97 min | Comedy, Drama, Mystery
Shattered by the unexpected news of their irreversible break-up, an aspiring orchestra conductor is puzzled by his girlfriend's mysterious and seemingly inexplicable case of disappearance. But, can he look beyond the facts?
Director: Andrés Baiz | Stars: Quim Gutiérrez, Martina García, María Soledad Rodríguez, Jose Luis Garcia
40. Outbreak (1995)
R | 127 min | Action, Drama, Thriller
Army doctors struggle to find a cure for a deadly virus spreading throughout a California town that was brought to America by an African monkey.
Director: Wolfgang Petersen | Stars: Dustin Hoffman, Rene Russo, Morgan Freeman, Kevin Spacey
41. Laura (1944)
Passed | 88 min | Drama, Film-Noir, Mystery
A police detective falls in love with the woman whose murder he is investigating.
Director: Otto Preminger | Stars: Gene Tierney, Dana Andrews, Clifton Webb, Vincent Price
42. Frost/Nixon (2008)
A dramatic retelling of the post-Watergate television interviews between British talk-show host David Frost and former president Richard Nixon.
Director: Ron Howard | Stars: Frank Langella, Michael Sheen, Kevin Bacon, Sam Rockwell
43. The Last Seduction (1994)
A devious sexpot steals her husband's drug money and hides out in a small town where she meets the perfect dupe for her next scheme.
Director: John Dahl | Stars: Linda Fiorentino, Peter Berg, Bill Pullman, Michael Raysses
44. Dalziel and Pascoe (1996–2007)
TV-14 | 120 min | Crime, Mystery, Drama
Supt. Dalziel and partner DI Pascoe investigate murders, and find a bond forming between them despite their blatantly differing personalities.
Stars: Warren Clarke, Colin Buchanan, David Royle, Jennifer James
45. Klute (1971)
R | 114 min | Crime, Mystery, Thriller
A small-town detective searching for a missing man has only one lead: a connection with a New York prostitute.
Director: Alan J. Pakula | Stars: Jane Fonda, Donald Sutherland, Charles Cioffi, Roy Scheider
46. Turner & Hooch (1989)
PG | 97 min | Comedy, Crime, Drama
A detective must adopt the dog of a dead man to help him find the murderer.
Director: Roger Spottiswoode | Stars: Tom Hanks, Mare Winningham, Craig T. Nelson, Reginald VelJohnson
47. The Vanishing of Sidney Hall (2017)
Sidney Hall finds accidental success and unexpected love at an early age, then disappears without a trace.
Director: Shawn Christensen | Stars: Logan Lerman, Elle Fanning, Kyle Chandler, Michelle Monaghan
48. La Mante (2017)
52 min | Crime, Drama, Thriller
A serial killer, nicknamed 'La Mante' decides to collaborate with the police when a string of murders that copycat her style suddenly appear.
Stars: Carole Bouquet, Fred Testot, Manon Azem, Pascal Demolon
49. Profiler (1996–2000)
Ally Walker stars as Dr. Sam Waters, a detective with the Violent Crimes Task Force, a federal agency which often works with the FBI, ATF, and other crime-solving agencies.
Stars: Ally Walker, Julian McMahon, A Martinez, Robert Davi
50. S1m0ne (2002)
PG-13 | 117 min | Comedy, Drama, Sci-Fi
A producer's film is endangered when his star walks off, so he decides to digitally create an actress to substitute for the star, becoming an overnight sensation that everyone thinks is a real person.
Director: Andrew Niccol | Stars: Al Pacino, Catherine Keener, Rachel Roberts, Benjamin Salisbury


a. 1. Cast down; low-lying.
Abject and lost lay these, covering the flood.
2. Degraded; servile; groveling; despicable; as, abject posture, fortune, thoughts.
3. Sunk to a low condition; down in spirit or hope; miserable; - of persons.
4. Humiliating; degrading; wretched; - of situations; as, abject poverty.
v. t. 1. To cast off or down; hence, to abase; to degrade; to lower; to debase.
n. 1. A person in the lowest and most despicable condition; a castaway.


text:
UN Launches High-Level Panel On Digital Cooperation, Led By Melinda Gates And Jack Ma
12/07/2018 by Intellectual Property Watch Leave a Comment
The United Nations today announced it has launched a high-level panel on digital cooperation, co-chaired by Melinda Gates (wife of Bill Gates of software titan Microsoft), and Jack Ma, head of China's e-commerce titan Alibaba Group. The 20-member panel will "identify policy, research and information gaps, and make proposals to strengthen international cooperation in the digital space," according to a release.
The press release is reprinted below:
United Nations Secretary-General Appoints High-level Panel on Digital Cooperation
United Nations Secretary-General António Guterres today announced the launch of a High-level Panel on Digital Cooperation.
"The scale, spread and speed of change made possible by digital technologies is unprecedented, but the current means and levels of international cooperation are unequal to the challenge," Mr. Guterres said.
"Digital technologies make a significant contribution to the realisation of the Sustainable Development Goals and they cut uniquely across international boundaries. Therefore, cooperation across domains and across borders is critical to realizing the full social and economic potential of digital technologies as well as mitigating the risks that they pose and curtailing any unintended consequences."
Ms. Melinda Gates, Co-Chair of the Bill & Melinda Gates Foundation, and Mr. Jack Ma, Executive Chairman of Alibaba Group, have been appointed by the UN Secretary-General as Co-Chairs of the Panel.
The Panel has a total of 20 members, representing a cross-section of expertise from government, private industry, civil society, academia and the technical community. A full list appears below.
The Secretary-General has asked the Panel to contribute to the broader public debate on the importance of cooperative and interdisciplinary approaches to ensure a safe and inclusive digital future for all taking into account relevant human rights norms. The panel is expected to identify policy, research and information gaps, and make proposals to strengthen international cooperation in the digital space.
"Technology is neither good nor bad. It's just a tool—a very powerful tool—and what matters is how the world uses it. If all people, especially the poorest and most vulnerable, have equal access to digital technology, they will use it to improve life for themselves and their families and raise their voices in conversations about what the future holds. Enabling this widescale empowerment is what this panel is about," said Melinda Gates.
The Panel will hold its first in-person meeting in late September 2018 and is expected to submit its final report to the Secretary-General within 9 months.
In carrying out its work, the Panel will undertake a wide range of public consultations, including at least two public events and an open process inviting global inputs including through online engagement activities starting in September. It will be supported by a small Secretariat funded by donor resources, and based in New York and Geneva.
"Soon, every industry will be digitized, and this will have a tremendous impact on every aspect of life. In this digital era, data and technology are more broadly available, enabling entrepreneurialism, economic growth, and improved quality of life for those who have the access and training to leverage it. Global, cross-sector collaboration is critical to ensure the benefits of the digital era are possible for all," said Jack Ma.
Members of the High-level Panel on Digital Cooperation:
Melinda Gates (USA), Co-Chair of the Bill & Melinda Gates Foundation
Jack Ma (China), Executive Chairman, Alibaba Group
Mohammed Al Gergawi (UAE), Minister of Cabinet Affairs and the Future, UAE
Yuichiro Anzai (Japan), President of the Japan Society for the Promotion of Science
Nikolai Astrup (Norway), Minister of International Development, Norway
Vinton Cerf (USA), Vice President and Chief Internet Evangelist, Google
Fadi Chehadé (USA), Partner at ABRY Partners
Isabel Guerrero Pulgar (Chile), Director, IMAGO Global Grassroots and Lecturer, Harvard Kennedy School
Marina Kaljurand (Estonia), Chair of the Global Commission on the Stability of Cyberspace
Bogolo Kenewendo (Botswana), Minister of Investment, Trade and Industry, Botswana
Akaliza Keza Ntwari (Rwanda), ICT advocate and entrepreneur
Marina Kolesnik (Russian Federation), senior executive, entrepreneur and WEF Young Global Leader
Doris Leuthard (Switzerland), Head of the Federal Department of the Environment, Transport, Energy and Communications, Switzerland
Cathy Mulligan (United Kingdom), Visiting Research Fellow Imperial College Centre for Cryptocurrency
Edson Prestes (Brazil), Professor, Institute of Informatics, Federal University of Rio Grande do Sul
Kira Radinsky (Israel), Director of Data Science, eBay
Nanjira Sambuli (Kenya), Digital Equality Advocacy Manager, World Wide Web Foundation
Sophie Soowon Eom (Republic of Korea), Founder of Adriel AI and Solidware
Dhananjayan Sriskandarajah (Australia), Secretary General, CIVICUS
Jean Tirole (France), Chairman of the Toulouse School of Economics and the Institute for Advanced Study in Toulouse
Amandeep Singh Gill (India), Executive Director, Secretariat of the High-level Panel on Digital Cooperation
Jovan Kurbalija (Serbia), Executive Director, Secretariat of the High-level Panel on Digital Cooperation
All panel members serve in their personal capacity, not as representatives of their respective institutions.
"UN Launches High-Level Panel On Digital Cooperation, Led By Melinda Gates And Jack Ma" by Intellectual Property Watch is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Filed Under: IP-Watch Briefs, IP Policies, Language, Themes, Venues, Access to Knowledge/ Education, Copyright Policy, English, ITU/ICANN, Information and Communications Technology/ Broadcasting, Lobbying, New Technologies, Technical Cooperation/ Technology Transfer, Trademarks/Geographical Indications/Domains, United Nations - other

redpajama_set_name: RedPajamaCommonCrawl


Ten One Design has released the Pogo Stylus designed specifically for the Apple iPhone and iPod Touch.
The sleek design of the Pogo Stylus features an ultra-light aluminum body with an anodized finish and laser graphics. The foam tip is soft, yet durable and conforms cleanly and precisely to the multi-touch screen. Sized for accuracy, it does away with the awkward typos and misfires common to fingertip-only use.
The $25 accessory is designed specifically for use on the iPhone's capacitance touch surface, which typically recognizes a finger touch only. Not sure how big a market there is for this accessory... but if you can't stand smudging your iPhone, this is for you.


Instructions for joining the "Milwaukee Electric Discussion List".
The Milwaukee Electric discussion list is available to anybody who wishes to discuss any aspect of Southeastern Wisconsin traction, transit or rail history.
Discussion of anything pertaining to past or present transportation topics such as transportation policies and politics is also encouraged.
continue by filling in the Subject and Body as indicated.
Once you subscribe to the list, please e-mail me with your identity, so I can introduce you to the group. All I receive is your e-mail address and no other identifying data.


Yo, Adrian! It's me, Rocky.
With great power. comes great responsibility.
This entry was posted on July 16, 2006 at 4:04 pm	and is filed under Movies, Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


hello, could you guys add more rnb/hiphop songs as there aren't many to choose from. I would love to see some of Bryson tillers songs from his new album and also some chris brown songs. I would also like to see some mario songs like 'let me love you" and " How Do I breathe." We need some of those emotional rnb chord progressions.
I've added them to our song list.


Happy Valentine's Day from Trafalgar Square Books! In honor of the relationships with horses we all cherish, here are a few shots of TSB authors with the horses they love, and the horses who love them.
Dorie McCullough Lawson, wife of painter T. Allen Lawson and daughter of historian David McCullough, will be sharing the story behind her new children's book TEX and signing books tomorrow, November 17, from 4:00 to 7:00 PM at NEST in Dedham, Massachusetts.
TSB Author Dorie McCullough Lawson Joins Toni Morrison, Sherman Alexie, Garrison Keillor, David McCullough, and Other Top Authors at the National Book Festival in Washington, DC—What a Fabulous Launch for Her New Children's Book TEX!
This past weekend the Library of Congress celebrated the "joys of reading aloud" on the National Mall in Washington, DC. The 2011 National Book Festival featured over 100 of today's most influential authors, including Toni Morrison, Russell Banks, Sherman Alexie, Garrison Keillor, and two-time Pulitzer-Prize-winning historian David McCullough, among many others. TSB author Dorie McCullough Lawson was featured in the Children's Pavilion, where she spoke and signed copies of her wonderful new children's book, TEX.
Although just out, TEX has already won the hearts of reviewers with its vivid color-block design and authentic photographs of the American West. You can order a copy of TEX for your favorite little cowboy or cowgirl at the TSB bookstore (its available NOW!), where shipping in the US is always FREE.
LOC: What sparked your imagination for your book – TEX?
DL: I have always been captivated by children of a certain age, usually from about 3 to 5, who in their pretend play become totally transported and transformed by the power of their imaginations. They become what they imagine. The little cowboy, Tex, was photographically interesting and a character simply waiting for a book.
LOC: What challenges do you face in your writing process? How do you overcome them?
DL: I have to hear a book in my head before I can write and sometimes I have trouble hearing it. If I'm not hearing it, then time is really the only thing that helps me with that challenge. Ideas (and I have many of them) usually have to stew and settle, get disrupted, and then stew again before I am ready to write.
LOC: What tips or advice can you share with young students who hope to start writing?
DL: Write about something that matters to you. If you are writing about a subject you don't know much about, learn about it, study it, look at it until you care about it. You can't write about anything if it doesn't matter to you, so make it matter.
LOC: Can you suggest a fun writing topic to get them started?
DL: When I was working on my book Posterity: Letters of Great Americans to their Children (Doubleday, 2003) I realized that many of the best letters were written when a parent was very angry or very sad – when emotions were running high. I would suggest writing a letter to someone about a subject that makes you spitting mad!
LOC: What is your list of favorite children or teen books?
LOC: How do you decide on themes for your books?
DL: I have written a non-fiction book, a novel and TEX is my first children's book. Although the three books are of different genres, I would say in each case, the themes have been arrived at by the characters. I don't choose themes, the characters choose them for me.
LOC: How important is research in the development of your books? Can you explain that process as well?
DL: Research is always very important! Authenticity is essential. Authenticity requires knowledge and knowledge is arrived at by research. I consider research to come in all shapes and sizes – everything from digging in archives to simply soaking it up. In the case of TEX, research came in the form of spending years in the West – in towns, on ranches, with animals and with cowboys. The photographs had to be authentic and the language had to fit with the subject and the character.
LOC: What is your advice to parents for passing the joys of reading on to their children?
DL: Talk about what you, yourself are reading. Be sure your children see you reading for pleasure and by that I mean reading books – not newspapers or magazine, not online, not on an e-reader – BOOKS!
Don't give up reading aloud when your children are proficient readers themselves! We are always reading a family book. Every night for about a half an hour our whole family sits together in the living room to listen while my husband or I read aloud a chapter or two to the family. Sometimes the older kids protest and sometimes the younger kids don't understand everything that is happening in the book, but they all hear it. With a family book always in the mix, no matter what is going on we all have something in common and that something is a book.


Jim had returned to resume his fellowship with Max Delbrück . And I ah, I had met Jim actually when I arrived in 1949. He was then just leaving to go to work with Herman Kalckar. What interested me at that point, was what about RNA? Not much was known about RNA, and in fact if you look at the reviews of that period, many people wondered whether RNA was a linear polymer at all because it has the potential for branching at the two-prong and three-prong hydroxyls. By the end of this conference I was determined to see whether RNA could form a double helix. Now in the paper by Jim and Francis they pointed out explicitly that ribose could not form that structure because of the van der Waals intrusion of that two-prong hydroxyls. And ah, so it wasn't clear. Jim became quite interested in that question as well, and we decided to work together. He was perhaps somewhat less interested in doing phage work in the Delbrück lab. So he used to come over quite often to Crellin, the chemistry lab. And what we did is we wrote to a number of people, asked them to send us preparations of RNA, and then tried to draw fibers using that same method. Gradually it became possible to accumulate pictures of fibers of RNA somewhat oriented, not as highly oriented as the DNA fibers. But they were always fuzzy and peculiarly most of them looked the same. The diffraction pattern was the same. Even though we knew that the base ratios were no longer one to one. They varied all over the map, in different preparations. And yet you pull a fiber, out came the same pattern. Whether it was a double helix or not we could not tell. Jim and I published a couple of papers during '54. One in Nature and one in the Proceedings, PNAS. But basically there was no resolution. We could not decide, we pointed out that there were some puzzles. Because even though the base ratios varied all over the place the patterns looked the same. So there was something there that we didn't understand.
MP: So I just want to ask you. At that time, RNA was an open question. So when you started working…when you just questioned yourself could the molecule even to form any kind of double helix, or what is that, why did you turn to RNA?
AR: Well we knew at the time that RNA was found in viruses. And it was known that the viruses could be changed, and it seemed reasonable to believe that the RNA played a role for carry the information for replicating viruses. But if so how did it do it? The way, the model that we had for DNA, namely replication by separating complementary strands, that seemed quite reasonable. But could RNA do that or not, we just didn't know.


There is a reason that our cut to size operation has been running at full capacity for the last five years with no interruptions in production: Our customers value our quality production.
Certain species, mainly hard maple and cherry are moved to our cut to size plant, which produces over 200 containers of high quality dimension blanks per year. Our quality program is extensive in our facility, utilizing random quality checks by our Quality people at the beginning of each shift to insure that the customer is receiving exactly what is required.Whether you are looking for blanks, sorted to width, or ripped to width, we would be happy to quote your specific needs.Each piece of wood cut on our dimension plant is stamped with a number to insure accountablility of our employees. This system allows management to gauge the employees ability to make quality conscience decisions.Our cut to size has an excellent reputation in Europe for above average quality, consistency in colour, thickness and service. We stand behind our production 100% against claims and we are confident in our ability to maintain consistent quality year after year.
See why Cherry Forest Products dimension is your choice if you are currently processing your own rough lumber into components.


A prototype design for this innovative project type, Overture is a unique community for 55+ active living with resort-inspired amenities and services. This community is a 4-story courtyard development with tuck-under garages. HLR was challenged with providing community space within 150 feet of each and every residential door.
Residents, who often move from large single-family homes, come to Overture for the larger community spaces and are encouraged to participate in the wide array of planned activities offered. With amenity spaces such as a demonstration kitchen, full service salon, gaming room, and various others, there is ample opportunity to gather with neighbors and friends. Distinctive outdoor spaces include two courtyards - one quiet and lushly landscaped, and the other a lively space just off the pool area - that are linked with a covered outdoor carriageway.


text:
package etcdserver

import (
	"encoding/json"
	"expvar"
	"fmt"
	"math/rand"
	"net/http"
	"os"
	"path"
	"regexp"
	"sync"
	"sync/atomic"
	"time"

	"github.com/coreos/etcd/alarm"
	"github.com/coreos/etcd/auth"
	"github.com/coreos/etcd/compactor"
	"github.com/coreos/etcd/discovery"
	"github.com/coreos/etcd/etcdserver/api/v2http/httptypes"
	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
	"github.com/coreos/etcd/etcdserver/membership"
	"github.com/coreos/etcd/etcdserver/stats"
	"github.com/coreos/etcd/lease"
	"github.com/coreos/etcd/mvcc"
	"github.com/coreos/etcd/mvcc/backend"
	"github.com/coreos/etcd/pkg/fileutil"
	"github.com/coreos/etcd/pkg/idutil"
	"github.com/coreos/etcd/pkg/pbutil"
	"github.com/coreos/etcd/pkg/runtime"
	"github.com/coreos/etcd/pkg/schedule"
	"github.com/coreos/etcd/pkg/types"
	"github.com/coreos/etcd/pkg/wait"
	"github.com/coreos/etcd/raft"
	"github.com/coreos/etcd/raft/raftpb"
	"github.com/coreos/etcd/rafthttp"
	"github.com/coreos/etcd/snap"
	"github.com/coreos/etcd/store"
	"github.com/coreos/etcd/version"
	"github.com/coreos/etcd/wal"
	"github.com/coreos/go-semver/semver"
	"github.com/coreos/pkg/capnslog"
	"golang.org/x/net/context"
)

const (
	// owner can make/remove files inside the directory
	privateDirMode = 0700

	DefaultSnapCount = 10000

	StoreClusterPrefix = "/0"
	StoreKeysPrefix    = "/1"

	purgeFileInterval = 30 * time.Second
	// monitorVersionInterval should be smaller than the timeout
	// on the connection. Or we will not be able to reuse the connection
	// (since it will timeout).
	monitorVersionInterval = rafthttp.ConnWriteTimeout - time.Second

	databaseFilename = "db"
	// max number of in-flight snapshot messages etcdserver allows to have
	// This number is more than enough for most clusters with 5 machines.
	maxInFlightMsgSnap = 16

	releaseDelayAfterSnapshot = 30 * time.Second
)

var (
	plog = capnslog.NewPackageLogger("github.com/coreos/etcd", "etcdserver")

	storeMemberAttributeRegexp = regexp.MustCompile(path.Join(membership.StoreMembersPrefix, "[[:xdigit:]]{1,16}", "attributes"))
)

func init() {
	rand.Seed(time.Now().UnixNano())

	expvar.Publish(
		"file_descriptor_limit",
		expvar.Func(
			func() interface{} {
				n, _ := runtime.FDLimit()
				return n
			},
		),
	)
}

type Response struct {
	Event   *store.Event
	Watcher store.Watcher
	err     error
}

type Server interface {
	// Start performs any initialization of the Server necessary for it to
	// begin serving requests. It must be called before Do or Process.
	// Start must be non-blocking; any long-running server functionality
	// should be implemented in goroutines.
	Start()
	// Stop terminates the Server and performs any necessary finalization.
	// Do and Process cannot be called after Stop has been invoked.
	Stop()
	// ID returns the ID of the Server.
	ID() types.ID
	// Leader returns the ID of the leader Server.
	Leader() types.ID
	// Do takes a request and attempts to fulfill it, returning a Response.
	Do(ctx context.Context, r pb.Request) (Response, error)
	// Process takes a raft message and applies it to the server's raft state
	// machine, respecting any timeout of the given context.
	Process(ctx context.Context, m raftpb.Message) error
	// AddMember attempts to add a member into the cluster. It will return
	// ErrIDRemoved if member ID is removed from the cluster, or return
	// ErrIDExists if member ID exists in the cluster.
	AddMember(ctx context.Context, memb membership.Member) error
	// RemoveMember attempts to remove a member from the cluster. It will
	// return ErrIDRemoved if member ID is removed from the cluster, or return
	// ErrIDNotFound if member ID is not in the cluster.
	RemoveMember(ctx context.Context, id uint64) error

	// UpdateMember attempts to update an existing member in the cluster. It will
	// return ErrIDNotFound if the member ID does not exist.
	UpdateMember(ctx context.Context, updateMemb membership.Member) error

	// ClusterVersion is the cluster-wide minimum major.minor version.
	// Cluster version is set to the min version that an etcd member is
	// compatible with when first bootstrap.
	//
	// ClusterVersion is nil until the cluster is bootstrapped (has a quorum).
	//
	// During a rolling upgrades, the ClusterVersion will be updated
	// automatically after a sync. (5 second by default)
	//
	// The API/raft component can utilize ClusterVersion to determine if
	// it can accept a client request or a raft RPC.
	// NOTE: ClusterVersion might be nil when etcd 2.1 works with etcd 2.0 and
	// the leader is etcd 2.0. etcd 2.0 leader will not update clusterVersion since
	// this feature is introduced post 2.0.
	ClusterVersion() *semver.Version
}

// EtcdServer is the production implementation of the Server interface
type EtcdServer struct {
	// r and inflightSnapshots must be the first elements to keep 64-bit alignment for atomic
	// access to fields

	// count the number of inflight snapshots.
	// MUST use atomic operation to access this field.
	inflightSnapshots int64

	readych chan struct{}
	r       raftNode

	cfg       *ServerConfig
	snapCount uint64

	w          wait.Wait
	stop       chan struct{}
	done       chan struct{}
	errorc     chan error
	id         types.ID
	attributes membership.Attributes

	cluster *membership.RaftCluster

	store store.Store

	applyV2 applierV2

	applyV3    applierV3
	kv         mvcc.ConsistentWatchableKV
	lessor     lease.Lessor
	bemu       sync.Mutex
	be         backend.Backend
	authStore  auth.AuthStore
	alarmStore *alarm.AlarmStore

	stats  *stats.ServerStats
	lstats *stats.LeaderStats

	SyncTicker <-chan time.Time
	// compactor is used to auto-compact the KV.
	compactor *compactor.Periodic

	// consistent index used to hold the offset of current executing entry
	// It is initialized to 0 before executing any entry.
	consistIndex consistentIndex

	// peerRt used to send requests (version, lease) to peers.
	peerRt   http.RoundTripper
	reqIDGen *idutil.Generator

	// forceVersionC is used to force the version monitor loop
	// to detect the cluster version immediately.
	forceVersionC chan struct{}

	msgSnapC chan raftpb.Message

	// wg is used to wait for the go routines that depends on the server state
	// to exit when stopping the server.
	wg sync.WaitGroup
}

// NewServer creates a new EtcdServer from the supplied configuration. The
// configuration is considered static for the lifetime of the EtcdServer.
func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) {
	st := store.New(StoreClusterPrefix, StoreKeysPrefix)

	var (
		w  *wal.WAL
		n  raft.Node
		s  *raft.MemoryStorage
		id types.ID
		cl *membership.RaftCluster
	)

	if terr := fileutil.TouchDirAll(cfg.DataDir); terr != nil {
		return nil, fmt.Errorf("cannot access data directory: %v", terr)
	}

	// Run the migrations.
	dataVer, err := version.DetectDataDir(cfg.DataDir)
	if err != nil {
		return nil, err
	}
	if err = upgradeDataDir(cfg.DataDir, cfg.Name, dataVer); err != nil {
		return nil, err
	}

	haveWAL := wal.Exist(cfg.WALDir())

	if err = os.MkdirAll(cfg.SnapDir(), privateDirMode); err != nil && !os.IsExist(err) {
		plog.Fatalf("create snapshot directory error: %v", err)
	}
	ss := snap.New(cfg.SnapDir())
	be := backend.NewDefaultBackend(path.Join(cfg.SnapDir(), databaseFilename))
	defer func() {
		if err != nil {
			be.Close()
		}
	}()

	prt, err := rafthttp.NewRoundTripper(cfg.PeerTLSInfo, cfg.peerDialTimeout())
	if err != nil {
		return nil, err
	}
	var remotes []*membership.Member
	switch {
	case !haveWAL && !cfg.NewCluster:
		if err = cfg.VerifyJoinExisting(); err != nil {
			return nil, err
		}
		cl, err = membership.NewClusterFromURLsMap(cfg.InitialClusterToken, cfg.InitialPeerURLsMap)
		if err != nil {
			return nil, err
		}
		existingCluster, gerr := GetClusterFromRemotePeers(getRemotePeerURLs(cl, cfg.Name), prt)
		if gerr != nil {
			return nil, fmt.Errorf("cannot fetch cluster info from peer urls: %v", gerr)
		}
		if err = membership.ValidateClusterAndAssignIDs(cl, existingCluster); err != nil {
			return nil, fmt.Errorf("error validating peerURLs %s: %v", existingCluster, err)
		}
		if !isCompatibleWithCluster(cl, cl.MemberByName(cfg.Name).ID, prt) {
			return nil, fmt.Errorf("incomptible with current running cluster")
		}

		remotes = existingCluster.Members()
		cl.SetID(existingCluster.ID())
		cl.SetStore(st)
		cl.SetBackend(be)
		cfg.Print()
		id, n, s, w = startNode(cfg, cl, nil)
	case !haveWAL && cfg.NewCluster:
		if err = cfg.VerifyBootstrap(); err != nil {
			return nil, err
		}
		cl, err = membership.NewClusterFromURLsMap(cfg.InitialClusterToken, cfg.InitialPeerURLsMap)
		if err != nil {
			return nil, err
		}
		m := cl.MemberByName(cfg.Name)
		if isMemberBootstrapped(cl, cfg.Name, prt, cfg.bootstrapTimeout()) {
			return nil, fmt.Errorf("member %s has already been bootstrapped", m.ID)
		}
		if cfg.ShouldDiscover() {
			var str string
			str, err = discovery.JoinCluster(cfg.DiscoveryURL, cfg.DiscoveryProxy, m.ID, cfg.InitialPeerURLsMap.String())
			if err != nil {
				return nil, &DiscoveryError{Op: "join", Err: err}
			}
			var urlsmap types.URLsMap
			urlsmap, err = types.NewURLsMap(str)
			if err != nil {
				return nil, err
			}
			if checkDuplicateURL(urlsmap) {
				return nil, fmt.Errorf("discovery cluster %s has duplicate url", urlsmap)
			}
			if cl, err = membership.NewClusterFromURLsMap(cfg.InitialClusterToken, urlsmap); err != nil {
				return nil, err
			}
		}
		cl.SetStore(st)
		cl.SetBackend(be)
		cfg.PrintWithInitial()
		id, n, s, w = startNode(cfg, cl, cl.MemberIDs())
	case haveWAL:
		if err = fileutil.IsDirWriteable(cfg.MemberDir()); err != nil {
			return nil, fmt.Errorf("cannot write to member directory: %v", err)
		}

		if err = fileutil.IsDirWriteable(cfg.WALDir()); err != nil {
			return nil, fmt.Errorf("cannot write to WAL directory: %v", err)
		}

		if cfg.ShouldDiscover() {
			plog.Warningf("discovery token ignored since a cluster has already been initialized. Valid log found at %q", cfg.WALDir())
		}
		var snapshot *raftpb.Snapshot
		snapshot, err = ss.Load()
		if err != nil && err != snap.ErrNoSnapshot {
			return nil, err
		}
		if snapshot != nil {
			if err = st.Recovery(snapshot.Data); err != nil {
				plog.Panicf("recovered store from snapshot error: %v", err)
			}
			plog.Infof("recovered store from snapshot at index %d", snapshot.Metadata.Index)
		}
		cfg.Print()
		if !cfg.ForceNewCluster {
			id, cl, n, s, w = restartNode(cfg, snapshot)
		} else {
			id, cl, n, s, w = restartAsStandaloneNode(cfg, snapshot)
		}
		cl.SetStore(st)
		cl.SetBackend(be)
		cl.Recover()
	default:
		return nil, fmt.Errorf("unsupported bootstrap config")
	}

	if terr := fileutil.TouchDirAll(cfg.MemberDir()); terr != nil {
		return nil, fmt.Errorf("cannot access member directory: %v", terr)
	}

	sstats := &stats.ServerStats{
		Name: cfg.Name,
		ID:   id.String(),
	}
	sstats.Initialize()
	lstats := stats.NewLeaderStats(id.String())

	srv = &EtcdServer{
		readych:   make(chan struct{}),
		cfg:       cfg,
		snapCount: cfg.SnapCount,
		errorc:    make(chan error, 1),
		store:     st,
		r: raftNode{
			Node:        n,
			ticker:      time.Tick(time.Duration(cfg.TickMs) * time.Millisecond),
			raftStorage: s,
			storage:     NewStorage(w, ss),
		},
		id:            id,
		attributes:    membership.Attributes{Name: cfg.Name, ClientURLs: cfg.ClientURLs.StringSlice()},
		cluster:       cl,
		stats:         sstats,
		lstats:        lstats,
		SyncTicker:    time.Tick(500 * time.Millisecond),
		peerRt:        prt,
		reqIDGen:      idutil.NewGenerator(uint16(id), time.Now()),
		forceVersionC: make(chan struct{}),
		msgSnapC:      make(chan raftpb.Message, maxInFlightMsgSnap),
	}

	srv.applyV2 = &applierV2store{srv}

	srv.be = be
	srv.lessor = lease.NewLessor(srv.be)
	srv.kv = mvcc.New(srv.be, srv.lessor, &srv.consistIndex)
	srv.consistIndex.setConsistentIndex(srv.kv.ConsistentIndex())
	srv.authStore = auth.NewAuthStore(srv.be)
	if h := cfg.AutoCompactionRetention; h != 0 {
		srv.compactor = compactor.NewPeriodic(h, srv.kv, srv)
		srv.compactor.Run()
	}

	if err = srv.restoreAlarms(); err != nil {
		return nil, err
	}

	// TODO: move transport initialization near the definition of remote
	tr := &rafthttp.Transport{
		TLSInfo:     cfg.PeerTLSInfo,
		DialTimeout: cfg.peerDialTimeout(),
		ID:          id,
		URLs:        cfg.PeerURLs,
		ClusterID:   cl.ID(),
		Raft:        srv,
		Snapshotter: ss,
		ServerStats: sstats,
		LeaderStats: lstats,
		ErrorC:      srv.errorc,
	}
	if err = tr.Start(); err != nil {
		return nil, err
	}
	// add all remotes into transport
	for _, m := range remotes {
		if m.ID != id {
			tr.AddRemote(m.ID, m.PeerURLs)
		}
	}
	for _, m := range cl.Members() {
		if m.ID != id {
			tr.AddPeer(m.ID, m.PeerURLs)
		}
	}
	srv.r.transport = tr

	return srv, nil
}

// Start prepares and starts server in a new goroutine. It is no longer safe to
// modify a server's fields after it has been sent to Start.
// It also starts a goroutine to publish its server information.
func (s *EtcdServer) Start() {
	s.start()
	go s.publish(s.cfg.ReqTimeout())
	go s.purgeFile()
	go monitorFileDescriptor(s.done)
	go s.monitorVersions()
}

// start prepares and starts server in a new goroutine. It is no longer safe to
// modify a server's fields after it has been sent to Start.
// This function is just used for testing.
func (s *EtcdServer) start() {
	if s.snapCount == 0 {
		plog.Infof("set snapshot count to default %d", DefaultSnapCount)
		s.snapCount = DefaultSnapCount
	}
	s.w = wait.New()
	s.done = make(chan struct{})
	s.stop = make(chan struct{})
	if s.ClusterVersion() != nil {
		plog.Infof("starting server... [version: %v, cluster version: %v]", version.Version, version.Cluster(s.ClusterVersion().String()))
	} else {
		plog.Infof("starting server... [version: %v, cluster version: to_be_decided]", version.Version)
	}
	// TODO: if this is an empty log, writes all peer infos
	// into the first entry
	go s.run()
}

func (s *EtcdServer) purgeFile() {
	var serrc, werrc <-chan error
	if s.cfg.MaxSnapFiles > 0 {
		serrc = fileutil.PurgeFile(s.cfg.SnapDir(), "snap", s.cfg.MaxSnapFiles, purgeFileInterval, s.done)
	}
	if s.cfg.MaxWALFiles > 0 {
		werrc = fileutil.PurgeFile(s.cfg.WALDir(), "wal", s.cfg.MaxWALFiles, purgeFileInterval, s.done)
	}
	select {
	case e := <-werrc:
		plog.Fatalf("failed to purge wal file %v", e)
	case e := <-serrc:
		plog.Fatalf("failed to purge snap file %v", e)
	case <-s.done:
		return
	}
}

func (s *EtcdServer) ID() types.ID { return s.id }

func (s *EtcdServer) Cluster() *membership.RaftCluster { return s.cluster }

func (s *EtcdServer) RaftHandler() http.Handler { return s.r.transport.Handler() }

func (s *EtcdServer) Lessor() lease.Lessor { return s.lessor }

func (s *EtcdServer) Process(ctx context.Context, m raftpb.Message) error {
	if s.cluster.IsIDRemoved(types.ID(m.From)) {
		plog.Warningf("reject message from removed member %s", types.ID(m.From).String())
		return httptypes.NewHTTPError(http.StatusForbidden, "cannot process message from removed member")
	}
	if m.Type == raftpb.MsgApp {
		s.stats.RecvAppendReq(types.ID(m.From).String(), m.Size())
	}
	return s.r.Step(ctx, m)
}

func (s *EtcdServer) IsIDRemoved(id uint64) bool { return s.cluster.IsIDRemoved(types.ID(id)) }

func (s *EtcdServer) ReportUnreachable(id uint64) { s.r.ReportUnreachable(id) }

// ReportSnapshot reports snapshot sent status to the raft state machine,
// and clears the used snapshot from the snapshot store.
func (s *EtcdServer) ReportSnapshot(id uint64, status raft.SnapshotStatus) {
	s.r.ReportSnapshot(id, status)
}

type etcdProgress struct {
	confState raftpb.ConfState
	snapi     uint64
	appliedi  uint64
}

func (s *EtcdServer) run() {
	snap, err := s.r.raftStorage.Snapshot()
	if err != nil {
		plog.Panicf("get snapshot from raft storage error: %v", err)
	}
	s.r.start(s)

	// asynchronously accept apply packets, dispatch progress in-order
	sched := schedule.NewFIFOScheduler()
	ep := etcdProgress{
		confState: snap.Metadata.ConfState,
		snapi:     snap.Metadata.Index,
		appliedi:  snap.Metadata.Index,
	}

	defer func() {
		sched.Stop()

		// must stop raft after scheduler-- etcdserver can leak rafthttp pipelines
		// by adding a peer after raft stops the transport
		s.r.stop()

		s.wg.Wait()

		// kv, lessor and backend can be nil if running without v3 enabled
		// or running unit tests.
		if s.lessor != nil {
			s.lessor.Stop()
		}
		if s.kv != nil {
			s.kv.Close()
		}
		if s.be != nil {
			s.be.Close()
		}
		if s.compactor != nil {
			s.compactor.Stop()
		}
		close(s.done)
	}()

	var expiredLeaseC <-chan []*lease.Lease
	if s.lessor != nil {
		expiredLeaseC = s.lessor.ExpiredLeasesC()
	}

	for {
		select {
		case ap := <-s.r.apply():
			f := func(context.Context) { s.applyAll(&ep, &ap) }
			sched.Schedule(f)
		case leases := <-expiredLeaseC:
			go func() {
				for _, l := range leases {
					s.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: int64(l.ID)})
				}
			}()
		case err := <-s.errorc:
			plog.Errorf("%s", err)
			plog.Infof("the data-dir used by this member must be removed.")
			return
		case <-s.stop:
			return
		}
	}
}

func (s *EtcdServer) applyAll(ep *etcdProgress, apply *apply) {
	s.applySnapshot(ep, apply)
	s.applyEntries(ep, apply)
	// wait for the raft routine to finish the disk writes before triggering a
	// snapshot. or applied index might be greater than the last index in raft
	// storage, since the raft routine might be slower than apply routine.
	<-apply.raftDone
	s.triggerSnapshot(ep)
	select {
	// snapshot requested via send()
	case m := <-s.msgSnapC:
		merged := s.createMergedSnapshotMessage(m, ep.appliedi, ep.confState)
		s.sendMergedSnap(merged)
	default:
	}
}

func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) {
	if raft.IsEmptySnap(apply.snapshot) {
		return
	}

	if apply.snapshot.Metadata.Index <= ep.appliedi {
		plog.Panicf("snapshot index [%d] should > appliedi[%d] + 1",
			apply.snapshot.Metadata.Index, ep.appliedi)
	}

	snapfn, err := s.r.storage.DBFilePath(apply.snapshot.Metadata.Index)
	if err != nil {
		plog.Panicf("get database snapshot file path error: %v", err)
	}

	fn := path.Join(s.cfg.SnapDir(), databaseFilename)
	if err := os.Rename(snapfn, fn); err != nil {
		plog.Panicf("rename snapshot file error: %v", err)
	}

	newbe := backend.NewDefaultBackend(fn)
	if err := s.kv.Restore(newbe); err != nil {
		plog.Panicf("restore KV error: %v", err)
	}
	s.consistIndex.setConsistentIndex(s.kv.ConsistentIndex())

	// Closing old backend might block until all the txns
	// on the backend are finished.
	// We do not want to wait on closing the old backend.
	s.bemu.Lock()
	oldbe := s.be
	go func() {
		if err := oldbe.Close(); err != nil {
			plog.Panicf("close backend error: %v", err)
		}
	}()

	s.be = newbe
	s.bemu.Unlock()

	if s.lessor != nil {
		s.lessor.Recover(newbe, s.kv)
	}

	if err := s.restoreAlarms(); err != nil {
		plog.Panicf("restore alarms error: %v", err)
	}

	if s.authStore != nil {
		s.authStore.Recover(newbe)
	}

	if err := s.store.Recovery(apply.snapshot.Data); err != nil {
		plog.Panicf("recovery store error: %v", err)
	}
	s.cluster.SetBackend(s.be)
	s.cluster.Recover()

	// recover raft transport
	s.r.transport.RemoveAllPeers()
	for _, m := range s.cluster.Members() {
		if m.ID == s.ID() {
			continue
		}
		s.r.transport.AddPeer(m.ID, m.PeerURLs)
	}

	ep.appliedi = apply.snapshot.Metadata.Index
	ep.snapi = ep.appliedi
	ep.confState = apply.snapshot.Metadata.ConfState
	plog.Infof("recovered from incoming snapshot at index %d", ep.snapi)
}

func (s *EtcdServer) applyEntries(ep *etcdProgress, apply *apply) {
	if len(apply.entries) == 0 {
		return
	}
	firsti := apply.entries[0].Index
	if firsti > ep.appliedi+1 {
		plog.Panicf("first index of committed entry[%d] should <= appliedi[%d] + 1", firsti, ep.appliedi)
	}
	var ents []raftpb.Entry
	if ep.appliedi+1-firsti < uint64(len(apply.entries)) {
		ents = apply.entries[ep.appliedi+1-firsti:]
	}
	if len(ents) == 0 {
		return
	}
	var shouldstop bool
	if ep.appliedi, shouldstop = s.apply(ents, &ep.confState); shouldstop {
		go s.stopWithDelay(10*100*time.Millisecond, fmt.Errorf("the member has been permanently removed from the cluster"))
	}
}

func (s *EtcdServer) triggerSnapshot(ep *etcdProgress) {
	if ep.appliedi-ep.snapi <= s.snapCount {
		return
	}

	// When sending a snapshot, etcd will pause compaction.
	// After receives a snapshot, the slow follower needs to get all the entries right after
	// the snapshot sent to catch up. If we do not pause compaction, the log entries right after
	// the snapshot sent might already be compacted. It happens when the snapshot takes long time
	// to send and save. Pausing compaction avoids triggering a snapshot sending cycle.
	if atomic.LoadInt64(&s.inflightSnapshots) != 0 {
		return
	}

	plog.Infof("start to snapshot (applied: %d, lastsnap: %d)", ep.appliedi, ep.snapi)
	s.snapshot(ep.appliedi, ep.confState)
	ep.snapi = ep.appliedi
}

// Stop stops the server gracefully, and shuts down the running goroutine.
// Stop should be called after a Start(s), otherwise it will block forever.
func (s *EtcdServer) Stop() {
	select {
	case s.stop <- struct{}{}:
	case <-s.done:
		return
	}
	<-s.done
}

// ReadyNotify returns a channel that will be closed when the server
// is ready to serve client requests
func (s *EtcdServer) ReadyNotify() <-chan struct{} { return s.readych }

func (s *EtcdServer) stopWithDelay(d time.Duration, err error) {
	select {
	case <-time.After(d):
	case <-s.done:
	}
	select {
	case s.errorc <- err:
	default:
	}
}

// StopNotify returns a channel that receives a empty struct
// when the server is stopped.
func (s *EtcdServer) StopNotify() <-chan struct{} { return s.done }

func (s *EtcdServer) SelfStats() []byte { return s.stats.JSON() }

func (s *EtcdServer) LeaderStats() []byte {
	lead := atomic.LoadUint64(&s.r.lead)
	if lead != uint64(s.id) {
		return nil
	}
	return s.lstats.JSON()
}

func (s *EtcdServer) StoreStats() []byte { return s.store.JsonStats() }

func (s *EtcdServer) AddMember(ctx context.Context, memb membership.Member) error {
	if s.cfg.StrictReconfigCheck && !s.cluster.IsReadyToAddNewMember() {
		// If s.cfg.StrictReconfigCheck is false, it means the option --strict-reconfig-check isn't passed to etcd.
		// In such a case adding a new member is allowed unconditionally
		return ErrNotEnoughStartedMembers
	}

	// TODO: move Member to protobuf type
	b, err := json.Marshal(memb)
	if err != nil {
		return err
	}
	cc := raftpb.ConfChange{
		Type:    raftpb.ConfChangeAddNode,
		NodeID:  uint64(memb.ID),
		Context: b,
	}
	return s.configure(ctx, cc)
}

func (s *EtcdServer) RemoveMember(ctx context.Context, id uint64) error {
	if s.cfg.StrictReconfigCheck && !s.cluster.IsReadyToRemoveMember(id) {
		// If s.cfg.StrictReconfigCheck is false, it means the option --strict-reconfig-check isn't passed to etcd.
		// In such a case removing a member is allowed unconditionally
		return ErrNotEnoughStartedMembers
	}

	cc := raftpb.ConfChange{
		Type:   raftpb.ConfChangeRemoveNode,
		NodeID: id,
	}
	return s.configure(ctx, cc)
}

func (s *EtcdServer) UpdateMember(ctx context.Context, memb membership.Member) error {
	b, err := json.Marshal(memb)
	if err != nil {
		return err
	}
	cc := raftpb.ConfChange{
		Type:    raftpb.ConfChangeUpdateNode,
		NodeID:  uint64(memb.ID),
		Context: b,
	}
	return s.configure(ctx, cc)
}

// Implement the RaftTimer interface

func (s *EtcdServer) Index() uint64 { return atomic.LoadUint64(&s.r.index) }

func (s *EtcdServer) Term() uint64 { return atomic.LoadUint64(&s.r.term) }

// Lead is only for testing purposes.
// TODO: add Raft server interface to expose raft related info:
// Index, Term, Lead, Committed, Applied, LastIndex, etc.
func (s *EtcdServer) Lead() uint64 { return atomic.LoadUint64(&s.r.lead) }

func (s *EtcdServer) Leader() types.ID { return types.ID(s.Lead()) }

func (s *EtcdServer) IsPprofEnabled() bool { return s.cfg.EnablePprof }

// configure sends a configuration change through consensus and
// then waits for it to be applied to the server. It
// will block until the change is performed or there is an error.
func (s *EtcdServer) configure(ctx context.Context, cc raftpb.ConfChange) error {
	cc.ID = s.reqIDGen.Next()
	ch := s.w.Register(cc.ID)
	start := time.Now()
	if err := s.r.ProposeConfChange(ctx, cc); err != nil {
		s.w.Trigger(cc.ID, nil)
		return err
	}
	select {
	case x := <-ch:
		if err, ok := x.(error); ok {
			return err
		}
		if x != nil {
			plog.Panicf("return type should always be error")
		}
		return nil
	case <-ctx.Done():
		s.w.Trigger(cc.ID, nil) // GC wait
		return s.parseProposeCtxErr(ctx.Err(), start)
	case <-s.done:
		return ErrStopped
	}
}

// sync proposes a SYNC request and is non-blocking.
// This makes no guarantee that the request will be proposed or performed.
// The request will be canceled after the given timeout.
func (s *EtcdServer) sync(timeout time.Duration) {
	ctx, cancel := context.WithTimeout(context.Background(), timeout)
	req := pb.Request{
		Method: "SYNC",
		ID:     s.reqIDGen.Next(),
		Time:   time.Now().UnixNano(),
	}
	data := pbutil.MustMarshal(&req)
	// There is no promise that node has leader when do SYNC request,
	// so it uses goroutine to propose.
	go func() {
		s.r.Propose(ctx, data)
		cancel()
	}()
}

// publish registers server information into the cluster. The information
// is the JSON representation of this server's member struct, updated with the
// static clientURLs of the server.
// The function keeps attempting to register until it succeeds,
// or its server is stopped.
func (s *EtcdServer) publish(timeout time.Duration) {
	b, err := json.Marshal(s.attributes)
	if err != nil {
		plog.Panicf("json marshal error: %v", err)
		return
	}
	req := pb.Request{
		Method: "PUT",
		Path:   membership.MemberAttributesStorePath(s.id),
		Val:    string(b),
	}

	for {
		ctx, cancel := context.WithTimeout(context.Background(), timeout)
		_, err := s.Do(ctx, req)
		cancel()
		switch err {
		case nil:
			close(s.readych)
			plog.Infof("published %+v to cluster %s", s.attributes, s.cluster.ID())
			return
		case ErrStopped:
			plog.Infof("aborting publish because server is stopped")
			return
		default:
			plog.Errorf("publish error: %v", err)
		}
	}
}

// TODO: move this function into raft.go
func (s *EtcdServer) send(ms []raftpb.Message) {
	sentAppResp := false
	for i := len(ms) - 1; i >= 0; i-- {
		if s.cluster.IsIDRemoved(types.ID(ms[i].To)) {
			ms[i].To = 0
		}

		if ms[i].Type == raftpb.MsgAppResp {
			if sentAppResp {
				ms[i].To = 0
			} else {
				sentAppResp = true
			}
		}

		if ms[i].Type == raftpb.MsgSnap {
			// There are two separate data store: the store for v2, and the KV for v3.
			// The msgSnap only contains the most recent snapshot of store without KV.
			// So we need to redirect the msgSnap to etcd server main loop for merging in the
			// current store snapshot and KV snapshot.
			select {
			case s.msgSnapC <- ms[i]:
			default:
				// drop msgSnap if the inflight chan if full.
			}
			ms[i].To = 0
		}
		if ms[i].Type == raftpb.MsgHeartbeat {
			ok, exceed := s.r.td.Observe(ms[i].To)
			if !ok {
				// TODO: limit request rate.
				plog.Warningf("failed to send out heartbeat on time (deadline exceeded for %v)", exceed)
				plog.Warningf("server is likely overloaded")
			}
		}
	}

	s.r.transport.Send(ms)
}

func (s *EtcdServer) sendMergedSnap(merged snap.Message) {
	atomic.AddInt64(&s.inflightSnapshots, 1)

	s.r.transport.SendSnapshot(merged)
	go func() {
		select {
		case ok := <-merged.CloseNotify():
			// delay releasing inflight snapshot for another 30 seconds to
			// block log compaction.
			// If the follower still fails to catch up, it is probably just too slow
			// to catch up. We cannot avoid the snapshot cycle anyway.
			if ok {
				select {
				case <-time.After(releaseDelayAfterSnapshot):
				case <-s.done:
				}
			}
			atomic.AddInt64(&s.inflightSnapshots, -1)
		case <-s.done:
			return
		}
	}()
}

// apply takes entries received from Raft (after it has been committed) and
// applies them to the current state of the EtcdServer.
// The given entries should not be empty.
func (s *EtcdServer) apply(es []raftpb.Entry, confState *raftpb.ConfState) (uint64, bool) {
	var applied uint64
	var shouldstop bool
	for i := range es {
		e := es[i]
		switch e.Type {
		case raftpb.EntryNormal:
			s.applyEntryNormal(&e)
		case raftpb.EntryConfChange:
			var cc raftpb.ConfChange
			pbutil.MustUnmarshal(&cc, e.Data)
			removedSelf, err := s.applyConfChange(cc, confState)
			shouldstop = shouldstop || removedSelf
			s.w.Trigger(cc.ID, err)
		default:
			plog.Panicf("entry type should be either EntryNormal or EntryConfChange")
		}
		atomic.StoreUint64(&s.r.index, e.Index)
		atomic.StoreUint64(&s.r.term, e.Term)
		applied = e.Index
	}
	return applied, shouldstop
}

// applyEntryNormal apples an EntryNormal type raftpb request to the EtcdServer
func (s *EtcdServer) applyEntryNormal(e *raftpb.Entry) {
	// raft state machine may generate noop entry when leader confirmation.
	// skip it in advance to avoid some potential bug in the future
	if len(e.Data) == 0 {
		select {
		case s.forceVersionC <- struct{}{}:
		default:
		}
		return
	}

	var raftReq pb.InternalRaftRequest
	if !pbutil.MaybeUnmarshal(&raftReq, e.Data) { // backward compatible
		var r pb.Request
		pbutil.MustUnmarshal(&r, e.Data)
		s.w.Trigger(r.ID, s.applyV2Request(&r))
		return
	}
	if raftReq.V2 != nil {
		req := raftReq.V2
		s.w.Trigger(req.ID, s.applyV2Request(req))
		return
	}

	// do not re-apply applied entries.
	if e.Index <= s.consistIndex.ConsistentIndex() {
		return
	}
	// set the consistent index of current executing entry
	s.consistIndex.setConsistentIndex(e.Index)
	ar := s.applyV3Request(&raftReq)
	if ar.err != ErrNoSpace || len(s.alarmStore.Get(pb.AlarmType_NOSPACE)) > 0 {
		s.w.Trigger(raftReq.ID, ar)
		return
	}

	plog.Errorf("applying raft message exceeded backend quota")
	go func() {
		a := &pb.AlarmRequest{
			MemberID: uint64(s.ID()),
			Action:   pb.AlarmRequest_ACTIVATE,
			Alarm:    pb.AlarmType_NOSPACE,
		}
		r := pb.InternalRaftRequest{Alarm: a}
		s.processInternalRaftRequest(context.TODO(), r)
		s.w.Trigger(raftReq.ID, ar)
	}()
}

// applyConfChange applies a ConfChange to the server. It is only
// invoked with a ConfChange that has already passed through Raft
func (s *EtcdServer) applyConfChange(cc raftpb.ConfChange, confState *raftpb.ConfState) (bool, error) {
	if err := s.cluster.ValidateConfigurationChange(cc); err != nil {
		cc.NodeID = raft.None
		s.r.ApplyConfChange(cc)
		return false, err
	}
	*confState = *s.r.ApplyConfChange(cc)
	switch cc.Type {
	case raftpb.ConfChangeAddNode:
		m := new(membership.Member)
		if err := json.Unmarshal(cc.Context, m); err != nil {
			plog.Panicf("unmarshal member should never fail: %v", err)
		}
		if cc.NodeID != uint64(m.ID) {
			plog.Panicf("nodeID should always be equal to member ID")
		}
		s.cluster.AddMember(m)
		if m.ID == s.id {
			plog.Noticef("added local member %s %v to cluster %s", m.ID, m.PeerURLs, s.cluster.ID())
		} else {
			s.r.transport.AddPeer(m.ID, m.PeerURLs)
			plog.Noticef("added member %s %v to cluster %s", m.ID, m.PeerURLs, s.cluster.ID())
		}
	case raftpb.ConfChangeRemoveNode:
		id := types.ID(cc.NodeID)
		s.cluster.RemoveMember(id)
		if id == s.id {
			return true, nil
		} else {
			s.r.transport.RemovePeer(id)
			plog.Noticef("removed member %s from cluster %s", id, s.cluster.ID())
		}
	case raftpb.ConfChangeUpdateNode:
		m := new(membership.Member)
		if err := json.Unmarshal(cc.Context, m); err != nil {
			plog.Panicf("unmarshal member should never fail: %v", err)
		}
		if cc.NodeID != uint64(m.ID) {
			plog.Panicf("nodeID should always be equal to member ID")
		}
		s.cluster.UpdateRaftAttributes(m.ID, m.RaftAttributes)
		if m.ID == s.id {
			plog.Noticef("update local member %s %v in cluster %s", m.ID, m.PeerURLs, s.cluster.ID())
		} else {
			s.r.transport.UpdatePeer(m.ID, m.PeerURLs)
			plog.Noticef("update member %s %v in cluster %s", m.ID, m.PeerURLs, s.cluster.ID())
		}
	}
	return false, nil
}

// TODO: non-blocking snapshot
func (s *EtcdServer) snapshot(snapi uint64, confState raftpb.ConfState) {
	clone := s.store.Clone()

	s.wg.Add(1)
	go func() {
		defer s.wg.Done()

		d, err := clone.SaveNoCopy()
		// TODO: current store will never fail to do a snapshot
		// what should we do if the store might fail?
		if err != nil {
			plog.Panicf("store save should never fail: %v", err)
		}
		snap, err := s.r.raftStorage.CreateSnapshot(snapi, &confState, d)
		if err != nil {
			// the snapshot was done asynchronously with the progress of raft.
			// raft might have already got a newer snapshot.
			if err == raft.ErrSnapOutOfDate {
				return
			}
			plog.Panicf("unexpected create snapshot error %v", err)
		}
		// commit v3 storage because WAL file before snapshot index
		// could be removed after SaveSnap.
		s.KV().Commit()
		// SaveSnap saves the snapshot and releases the locked wal files
		// to the snapshot index.
		if err = s.r.storage.SaveSnap(snap); err != nil {
			plog.Fatalf("save snapshot error: %v", err)
		}
		plog.Infof("saved snapshot at index %d", snap.Metadata.Index)

		// keep some in memory log entries for slow followers.
		compacti := uint64(1)
		if snapi > numberOfCatchUpEntries {
			compacti = snapi - numberOfCatchUpEntries
		}
		err = s.r.raftStorage.Compact(compacti)
		if err != nil {
			// the compaction was done asynchronously with the progress of raft.
			// raft log might already been compact.
			if err == raft.ErrCompacted {
				return
			}
			plog.Panicf("unexpected compaction error %v", err)
		}
		plog.Infof("compacted raft log at %d", compacti)
	}()
}

func (s *EtcdServer) PauseSending() { s.r.pauseSending() }

func (s *EtcdServer) ResumeSending() { s.r.resumeSending() }

func (s *EtcdServer) ClusterVersion() *semver.Version {
	if s.cluster == nil {
		return nil
	}
	return s.cluster.Version()
}

// monitorVersions checks the member's version every monitorVersionInterval.
// It updates the cluster version if all members agrees on a higher one.
// It prints out log if there is a member with a higher version than the
// local version.
func (s *EtcdServer) monitorVersions() {
	for {
		select {
		case <-s.forceVersionC:
		case <-time.After(monitorVersionInterval):
		case <-s.done:
			return
		}

		if s.Leader() != s.ID() {
			continue
		}

		v := decideClusterVersion(getVersions(s.cluster, s.id, s.peerRt))
		if v != nil {
			// only keep major.minor version for comparison
			v = &semver.Version{
				Major: v.Major,
				Minor: v.Minor,
			}
		}

		// if the current version is nil:
		// 1. use the decided version if possible
		// 2. or use the min cluster version
		if s.cluster.Version() == nil {
			if v != nil {
				go s.updateClusterVersion(v.String())
			} else {
				go s.updateClusterVersion(version.MinClusterVersion)
			}
			continue
		}

		// update cluster version only if the decided version is greater than
		// the current cluster version
		if v != nil && s.cluster.Version().LessThan(*v) {
			go s.updateClusterVersion(v.String())
		}
	}
}

func (s *EtcdServer) updateClusterVersion(ver string) {
	if s.cluster.Version() == nil {
		plog.Infof("setting up the initial cluster version to %s", version.Cluster(ver))
	} else {
		plog.Infof("updating the cluster version from %s to %s", version.Cluster(s.cluster.Version().String()), version.Cluster(ver))
	}
	req := pb.Request{
		Method: "PUT",
		Path:   membership.StoreClusterVersionKey(),
		Val:    ver,
	}
	ctx, cancel := context.WithTimeout(context.Background(), s.cfg.ReqTimeout())
	_, err := s.Do(ctx, req)
	cancel()
	switch err {
	case nil:
		return
	case ErrStopped:
		plog.Infof("aborting update cluster version because server is stopped")
		return
	default:
		plog.Errorf("error updating cluster version (%v)", err)
	}
}

func (s *EtcdServer) parseProposeCtxErr(err error, start time.Time) error {
	switch err {
	case context.Canceled:
		return ErrCanceled
	case context.DeadlineExceeded:
		curLeadElected := s.r.leadElectedTime()
		prevLeadLost := curLeadElected.Add(-2 * time.Duration(s.cfg.ElectionTicks) * time.Duration(s.cfg.TickMs) * time.Millisecond)
		if start.After(prevLeadLost) && start.Before(curLeadElected) {
			return ErrTimeoutDueToLeaderFail
		}

		lead := types.ID(atomic.LoadUint64(&s.r.lead))
		switch lead {
		case types.ID(raft.None):
			// TODO: return error to specify it happens because the cluster does not have leader now
		case s.ID():
			if !isConnectedToQuorumSince(s.r.transport, start, s.ID(), s.cluster.Members()) {
				return ErrTimeoutDueToConnectionLost
			}
		default:
			if !isConnectedSince(s.r.transport, start, lead) {
				return ErrTimeoutDueToConnectionLost
			}
		}

		return ErrTimeout
	default:
		return err
	}
}

func (s *EtcdServer) KV() mvcc.ConsistentWatchableKV { return s.kv }
func (s *EtcdServer) Backend() backend.Backend {
	s.bemu.Lock()
	defer s.bemu.Unlock()
	return s.be
}

func (s *EtcdServer) AuthStore() auth.AuthStore { return s.authStore }

func (s *EtcdServer) restoreAlarms() error {
	s.applyV3 = newQuotaApplierV3(s, &applierV3backend{s})

	as, err := alarm.NewAlarmStore(s)
	if err != nil {
		return err
	}
	s.alarmStore = as
	if len(as.Get(pb.AlarmType_NOSPACE)) > 0 {
		s.applyV3 = newApplierV3Capped(s.applyV3)
	}
	return nil
}

redpajama_set_name: RedPajamaGithub


text:
Home » Regions
North America is a dynamic migration region, with the United States home to more immigrants than any other country in the world, the Mexico-U.S. corridor the globe's top migration corridor, and Canada a leading destination for migrants. Research collected here focuses on everything from visa policy and border management to immigrant integration, national identity, the demographics of immigrants in the region and their educational and workforce outcomes, and ways to more effectively use migration policy as a lever for national and regional competitiveness.
Immigrants and Welfare Use
By Amanda Levinson
Homeland Security Dept. Proposal Moves Forward
By Deborah Waller Meyers
Immigrants and Welfare Reform: Glossary
Immigrants, Welfare Reform and the Coming Reauthorization Vote
By Audrey Singer
Converging Realities of the U.S.-Mexico Relationship
By Demetrios G. Papademetriou
Bush Proposal Lumps INS into Homeland Security Dept.
Reconcilable Differences? An Evaluation of Current INS Restructuring Proposals
By Demetrios G. Papademetriou and Deborah W. Meyers
Gov't Mulls Revamping INS, Shortening Visas
Browse by Content TypeReportsArticlesPolicy BriefsCommentariesFact SheetsBooksExplainersMultimedia
Aid to Families with Dependent Children (AFDC): Authorized under the Social Security Act of 1935, AFDC provided financial assistance to families with children who were deprived of support due to the unemployment, death, disability, or absence of at least one parent. AFDC was replaced by PRWORA in 1996.
Legislative Progress on Department of Homeland Security Proposal... Local/Federal Law Enforcement Cooperation... Continuation of Secret Detentions... Senior Diplomat Asked to Resign... Extension of Temporary Protected Status (TPS)
The Personal Responsibility and Work Opportunity Reconciliation Act (PRWORA) of 1996 dramatically reformed the nation's welfare system. MPI's Amanda Levinson takes a closer look at how these changes affected immigrants.
Immigration and Security Post-Sept. 11
Resolving complex legal, social, and security issues after Sept. 11 will not be easy. But what does immigration have to do with it? Muzaffar Chishti, MPI Senior Policy Analyst, explains.
Large-scale migration from Mexico to the United States is expected to continue well into the next decade. MPI Co-Director Demetrios Papademetriou looks at attempts to move the U.S.-Mexico migration relationship from one mired in problems and recriminations to one yielding important and reciprocal economic and national security benefits.
INS Included in Homeland Security Proposal... Registering and Monitoring Non-Immigrants... Opposition to Local Enforcement of Immigration Laws Continues... Inquiry Regarding Detention of Haitians...
For more than a century, policymakers and practitioners have debated the structure and purpose of the U.S. immigration system, but in the aftermath of recent breaches the momentum necessary for reform has arrived. A look at the challenges the INS faced and proposals and next steps.
Competing Futures: The Children of America's Newest Immigrants
Diverse origins. Diverse opportunities. Rubén G. Rumbaut, Professor of Sociology and co-director of the Center for Research on Immigration, Population, and Public Policy at the University of California Irvine, takes a closer look at the trajectories and adaptation of first and second-generation youth in the United States. Over a decade of longitudinal data provide early clues to the cohesive and the centrifugal forces shaping America's immigrant future. Will the achievements that characterize today's immigrant youth follow them through to adulthood?
Adjust Font
Andrew Selee
Margie McHugh
Doris Meissner
Essey Workie
Muzaffar Chishti
Delia Pompa
Demetrios G. Papademetriou
Michael Fix
Kathleen Newland
Jeanne Batalova
Julia Gelatt
Melissa Lazarín
Maki Park
Julie Sugarman
Kate Hooper
Valerie Lacarte
Ariel G. Ruiz Soto
Jessica Bolter
Jacob Hofstetter
Andrea Tanco
Jazmin Flores Peña
Ivana Tú Nhi Giang
Stephanie Heredia
Lillie Hinkle
Multimedia see all >
Deferred Action for Childhood Arrivals (DACA) Data Tools
Use these data tools to learn about DACA recipients at U.S. and state levels, as well as their participation rates. They also offer DACA participation rates by top countries of origin.
This feature presents the latest, most sought-after data on immigrants in the United States—by origin, residence, legal status, deportations, languages spoken, and more—in one easy-to-use resource.
U.S., State, & County Profiles of Unauthorized Immigrants
Want the latest MPI estimates and characteristics of unauthorized immigrants in the U.S.? Use this data tool to get population estimates and more—including countries of origin, recency of arrival, educational enrollment and attainment, incomes, English proficiency, and health-care coverage—at the national level, by state, and for top counties.
Michelle Mittelstadt


Her tears tasted of the River Acheron.
That gave me pause. I couldn't remember the last time I had felt such loneliness, such overbearing sadness. A subtle humour that, considering I live in a cemetery, but there you have it.
Now don't go thinking I'm one of those boggarts or dweomerfale that feed off of that sort of thing, no, not at all! but when those tears spread across the surface of the pond like oil, coloured in a rainbow of agony and pain, I did feel a pang. Story is what I'm after, you see, and sorrow that deep has a tale to tell.
There are stories that tell of walking on water, and I was nearly needy enough to bolt straightaways over that tainted surface, but I held myself back for two reasons. First off, she was in a fragile state, and a forthright charge would do nothing to set her at ease. Even if she didn't run, she'd not be likely to speak freely of dark secrets, now would she? No story would have meant no reason to rush to her in the first place – not that she'd know that – and I'm sure that if I went fleetly flying over the rippling waters, it would have her thinking all sorts of nasty things were about to occur, and she'd be downright uncommunicative. Not only that, but the second reason for not running the waves is even simpler.
I would sink like a rock.
I felt as if someone was watching me. Through the tears, the pond, the trees, the crypts, and the monuments blended and blurred, like an impressionistic painting. Perhaps if I had tried to focus, to wipe my eyes, even just to blink… but I didn't really feel it was worth the effort.
Didn't feel much of anything, really.
Like the eyes on me.
Did Van Gogh paint crypts? The one across the way, done with dashes of still-wet paint, held staring eyes. Dead eyes – no, undead eyes, I mused. Vampires, werewolves, and zombies, oh my. Or maybe a psychotic killer behind a headstone, who picked out the perfect prey – blinded by the tears in her eyes. On any other day, those kind of thoughts would drive me away. No sanctuary when you've got one eye peeled for madmen with axes and chainsaws and another on the lookout for gypsies and thieves, the third firmly fixed on chimeras and dragons that are feeling a nagging rumbling in their supernal bellies.
This particular day, though, no matter what weird creature might come by to grind my bones to make some bread, it would be my sanctuary.
It was the best I had on short notice, so it would have to do.
That, and, although I wasn't exactly suicidal, if a serial killer or other monster stepped out from behind a tree and asked for a volunteer to be his victim, I'd be the first to raise my hand.
Yeah. So maybe a little suicidal.


Software Downloads for "Compaq Software Wifi"
Hospitality WiFi solution needs to be great - as your guests expect it. A fast and reliable WiFi network with uninterrupted wireless coverage over the entire facility is just a starting point to satisfy guests. The second, equally important task is to promote hotel amenities, offer high-speed paid Internet access, and collect guest surveys - so that you can get real-time feedback and use it to increase your rank on review sites like TripAdvisor and Booking.com. Start Hotspot Cloud WiFi Software is a robust and cost effective solution suitable for any hospitality deployment.
Hotel WiFi software helps you manage guest WiFi access with time and bandwidth control. Customers are redirected customized splash page to enter valid room number and name, or login with social account, username/password or voucher ticket. Automate WiFi access with a Hotel PMS integration to major PMS systems like Opera. Upon the successful login, account will be created in a Hotel system, where you can set free access, or as a post charge with different limitations - Price Plans. Customers will see remaining time and bandwidth, browse the Internet until account expires, and refill the account when needed.
Using our Call Shop Billing system you can even grant customers with credit by taking payment before even they make a call. So with us you will have two options either to bill your customers after the completion of call (Post Paid Billing) or accept payment before they make a call and a lot them with a credit limit (Pre Paid Billing). So you can real-time bill the prepaid (credit) call shop user. The system checks the user's account balance before authorizing the call and always terminates the call on zero credit.
Wireless Hotspot Software is a Unique Hotspot Billing, Ticketing and Hotspot Management Freeware. Sell Web Access Passwords Online, Print & Offer Prepaid Access Cards, View Video Ads for Free Access & Manage Several Hotspots. dHotSpot is Hosted on a Hotspot Server, giving you the freedom to operate your hotspot business from your home. Register a Free Account Now.
dHotSpot is a Free, Hosted Shareware that has optional affordable upgrades.
A fully functional free version is available and is restricted to one hotspot license and imposes a monthly ticket cap.
Sadly I do not have an HTC One to test with so I am unable to resolve the issue at this time.
This Softpaq contains the files included on the Compaq System Board Software Adjustment CD. In the event your CD is damaged or missing, this Softpaq can be downloaded, extracted, and then written to CD-R/RW media using a CD-R/RW optical drive and CD-R/RW writing software. Compaq System Board Software Adjustment will help you re-create the CD in moments..
WiFi hardware Billing software Interface your WiFi with your hotel PMS or IDS NEXT ERP Connect with a WiFi vendor that is reliable and stable Ensure your maintenance staff is adequately trained A comprehensive WiFi Billing software package will ensure you keep staff intervention to the minimum as the process of accessing WiFi is fully automated. Cost of accessing the internet is also automatically posted to the guests account in the PMS and simplifies billing at your front office..
Portable Penetrator is a complete solution for securing your wireless network and identifying any security flaws before hackers have a chance to do so. This wifi security software provides detailed reports, exposing security issues before it is too late. It allows you to fully secure all of the wireless networks and recover WPA2, WPA and WEP keys in your business so that no one can break into the network and steal important, confidential information. This automatic wifi cracker works with WEP, WPA and WPA2 encrypted networks, thoroughly scanning for all security vulnerabilities.
Summary: HP notebook WiFi Router is a software-based WiFi routing utility that turns your HP notebook into a wireless router. Designed specially for HP brand notebooks for sharing the HP notebook's Internet with other WiFi-enabled devices. Detailed: HP Notebook WiFi Router is a handy and easy to use software router for HP notebooks. After downloading and installing the lightweight application, HP Notebook WiFi Router utilizes your HP notebook's built in WiFi card to wirelessly share any available Internet connection: a wired broadband connection, a cable modem or 3G USB adapter.
Summary: Acer notebook WiFi Router is a software-based WiFi routing utility that turns your Acer notebook into a wireless router. Designed specially for Acer brand notebooks for sharing the Acer notebook's Internet with other WiFi-enabled devices. Detailed: Acer Notebook WiFi Router is a handy and easy to use software router for Acer notebooks. After downloading and installing the lightweight application, Acer Notebook WiFi Router utilizes your Acer notebook's built in WiFi card to wirelessly share any available Internet connection: a wired broadband connection, a cable modem or 3G USB adapter.


Are you a coder that wants to learn more about auditing? Maybe you're an auditor and you're finally going after that CPMA® auditing credential through AAPC. Either way, we've got a product for you here at CCO. Hi there, my name is Chandra Stephenson, I'm the program director at CCO and I wanna talk to you for just a minute about our Medical Auditing Blitz. The Medical Auditing Blitz is the latest in our Blitz Products. If you've not seen our Blitz before, the Blitz Products are intended to be a review course. Once you've either had a full course geared at a certain credential or if you've got quite a bit of experience in a particular field, but you want a short, little review of everything that's gonna be on the exam, our Medical Auditing Blitz is just that. Let's take a look and see what all is included in this particular product.
With the Medical Auditing Blitz, the focus is on the breakdown of the CPMA® exam. We're gonna talk about the six sections included according to the AAPC website. We actually go through each one of these in great detail and cover all of the pieces included according to the AAPC site for what's on the exam. When I say the AAPC site, we talk through the exam structure, question breakdown, tips for preparing, why you wanna go after this credential, who auditors are, what they do, all the different types of auditing available out there. But this is what I really wanna focus on. We give you the breakdown section by section by section. We tell you right up front how the exam is structured, what the requirements are, how long you have to take the exam, if it's proctored or not, if you get a free retake, what the cost is, and everything ties back to the AAPC sales pages. So we show you right here, this is one of my favorite slides, right, we show you the breakdown of the exam, how many questions, or what percentage of the exam is in each area. And then if we take a look, I'm gonna show you the sales page that I'm talking about on the AAPC website where they talk about their certification exam. For example, according to the AAPC page, if we look down here, here are the six sections that we have said on our slides we're covering, right? That we're gonna go through as part of the Medical Auditing Blitz. What we then do is we go through each one of these sections in detail. If you expand it, they tell you how many questions and the topics. We cover each of these topics. We go through the pertinent facts that you need to know about each one, and we give you more resources to go look at to make sure that you have that information. We step section by section through here, make sure that we cover every single topic that's addressed on the certification exam.
So if you are a coder looking to get into the auditing field, you're an auditor, you're wanting to get that certification, you've got experience in the field, or you've been through a full course, the Medical Auditing Blitz is probably for you. If you're a coder and you wanna know more about auditing but you're not sure you wanna take a full course, again, the Medical Auditing Blitz may be right for you, because it'll tell you all of the different areas included and give you a baseline of where to start your studies if you haven't already reviewed those materials. If you've already reviewed it, it's a great summary to go back through everything and make sure you learned all the important and pertinent pieces that you'll need for certification. So I hope this answers some of the questions that you've had about the CPMA® and the Medical Auditing Blitz, and hope to see you in a future course very soon. Happy learning!
Chandra – seriously, you are awesome. Your ability to take a ridiculous amount of info and cram it into a Blitz BUT still educate on everything necessary for the exam is a true talent. Took me 4 hours to complete the test and walked out feeling very confident all because of the Medical Auditing blitz. Thank you so much!
Our Medical Auditing Review Blitz videos provide a succinct and thorough explanation of Medical Auditing that will help you bring your skills up to speed for your current or upcoming CPMA® Exam.
In addition to the Medical Auditing Review Blitz videos, we also provide access to the Agenda, Handouts and PowerPoint handouts.
We've put together a great suite of bonuses, extras and resources to compliment the core material. These bonuses include handouts, videos, job aids and additional lectures to round out your training.
So glad I took the time to take your Medical Auditing Blitz course, I passed on my first attempt. The Material covered was spot on, so anyone out there has second thoughts about the Medical Auditing Blitz just stop and do it.
The Medical Auditing Blitz was key in my preparation. I felt confident while taking the exam and finished with time to spare. I only wish I had learned of CCO earlier.
The Medical Auditing Blitz explained the material in the AAPC study guide from a different perspective, and the combination of the two gave me everything I needed to pass the CPMA® exam. Thank you for the knowledge and confidence that I needed!
I passed the CPMA® exam on the first try!!!
It was an excellent learning experience and knowledge enhancer. I would credit my success to we'll structured curriculum, dedicated and experienced instructors. I would highly recommend students who are planning to take the CPMA® Exam to enroll in this program. I was able clear this certification in my first attempt. I would like to Thank CCO and I hope to get more certifications In future.
Invest In The Medical Auditing Review Blitz Today!
Is there a textbook included for the Medical Auditing Review Blitz?


text:
Bobovo (Pljevlja), een plaats in de Montenegrijnse gemeente Pljevlja
 Bobovo (Svilajnac), een plaats in de Servische gemeente Svilajnac

redpajama_set_name: RedPajamaWikipedia


this edition of 1888 is dedicated to Heritage. We meet people and organisations who, like us, haven't forgotten their origins, who build on tradition – and understand how brands with history must also embrace innovation. Our cover feature focuses on book collecting – specifically the stories of Sherlock Holmes, who recently celebrated a landmark anniversary of his own. Like Carl F. Bucherer watches, these precious tomes are heirlooms that can be touched, enjoyed and passed on as a legacy to be treasured.


Prolonging the lifespan of your fruit and vegetables, the drawer's blue LED lights preserve their Vitamin C content and retain their nutrients and taste for longer.
Creating a more even spread of illumination in the fridge and freezer, the side wall LED lights offer bright, durable and energy efficient lighting to help you easily locate what you're looking for.
Good Points: Good looking, smart, cold fridge with fabulous wine cooler.
Bad Points: The ice machine has never worked from day one of delivery. We've had two visits from an engineer and still not working. Watch this space.


The work Fire will fall represents a distinct intellectual or artistic creation found in City Libraries, City of Gold Coast. This resource is a combination of several types including: Work, Multimedia, Software, Computer Files.
ShadowStrike poisoned the water of Trinity Falls two months ago. Now the Trinity Four, the teens most affected by the poison, have been isolated in a remote mansion under twenty-four-hour medical care while scientists on four continents rush to discover a cure. Meanwhile, U.S. operatives scour the world for the bioterrorists responsible for this heinous crime as two teen virtual spies, also infected, hunt for the criminals on the Internet ..