Kuldeep Yadav starred as India overcame a brilliant all-round effort from Sri Lanka's Dunith Wellalage to win a tense Asia Cup clash by 41 runs on Tuesday and book a place in the final.
Kuldeep took four wickets including the final two as India defended 213, bowling out Sri Lanka for 172 to silence a large home crowd at Colombo's R. Premadasa Stadium.
India recorded their second straight Super Four win in the 50-over tournament, a prelude to the upcoming ODI World Cup, and ended Sri Lanka's 13-match winning streak in ODIs.
Wellalage, who claimed his maiden ODI five-wicket haul, remained unbeaten on 42 when he ran out of partners as left-arm wrist spinner Kuldeep (4-43) wrapped up the opposition tail in 41.3 overs.
It was India's third straight day on the field after they crushed Pakistan by 228 runs on Monday in a match that was played across two days due to rain and again saw the in-form Kuldeep among the wickets, finishing with 5-25.
The next Super Four match between Sri Lanka and Pakistan on Thursday will decide the second finalists between the two teams.
India skipper Rohit Sharma scored 53 to hand his team a brisk start but Wellalage hit back.
The 20-year-old returned figures of 5-40 including the key wickets of Rohit and Virat Kohli with strong support from part-time spinner Charith Asalanka, who claimed four victims for 18 runs.
Rohit entered an elite list of players with more than 10,000 ODI runs and hit his second successive fifty.
Wellalage struck with his first ball of the match when he bowled Shubman Gill for 19 and there was no looking back for the young spinner.
He made the home fans erupt with the wicket of Kohli who fell for three a day after an unbeaten 122 against Pakistan at the same venue.
Rohit was also bowled by Wellalage who snared his third scalp in three overs.
Ishan Kishan, who made 33, and previous-match centurion KL Rahul attempted to rebuild the innings with a stand of 63.
Wellalage ended that partnership when he got Rahul caught and bowled for 39 and then took his fifth.
Asalanka kept chipping away from the other end and was on a hat-trick with India on 186-9, but Axar Patel took the total past 200 after a nearly 45-minute rain break and hit 26.
India hit back with regular wickets and Jasprit Bumrah struck twice.
Asalanka attempted to increase the run-rate but became Kuldeep's second wicket.
Dhananjaya de Silva fought back along with Wellalage in a threatening seventh-wicket stand of 63 but Ravindra Jadeja broke the partnership with the wicket of De Silva for 41.