Shikhar Dhawan continued his golden run but a rare flop show from the famed middle-order saw Sri Lanka restrict India to 329 for 6 here on the first day of third cricket Test.
Courtesy Dhawan's (119) sixth Test hundred and a record 18-run opening stand with KL Rahul (85), India looked good for a score close to 400 after opting to bat.
However, some fine bowling in the final two sessions by left-arm spinner Malinda Pushpakumara (3/40 in 18 overs) and chinaman Lakshan Sandakan (2/84 in 25 overs) helped Sri Lanka gain some foothold when stumps were drawn on the opening day.
The in-form Cheteshwar Pujara (8), last Test's centurion Ajinkya Rahane (17) were dismissed cheaply while skipper Virat Kohli (42) was dismissed after getting set.
However, Kohli had been reaching out to play the spinners from his crease and ended up edging the ball to first slip off Sandakan in the 79th over.
Ravichandran Ashwin (31) looked compact but became left- arm seamer Vishwa Fernando's scalp at the fag end of the day.
Ashwin and Wriddhiman Saha (13 batting), who survived a DRS appeal for caught behind, then brought up India's 300 in the 81st over even as the visitors were in dire need of a partnership to make their morning advantage count.
The duo added 26 runs for the 6th wicket and negotiated the second new ball properly as well. But Ashwin was caught behind off Fernando, two overs before stumps leaving India with more work to do on the second day.
Earlier, it was yet another solid start from Dhawan and Rahul as they bettered the highest opening stand against Sri Lanka in away Tests, going past the 173-run stand between Manoj Prabhakar and Navjot Sidhu during the
Rahul missed out on another Test hundred, miscuing one straight to Dimuth Karunaratne at mid-on off left-arm spinner Pushpakumara in the 40th over. His 135-ball knock had eight fours.
Dhawan though stayed and scored his second hundred of this series off 107 balls. He added 31 runs with Cheteshwar Pujara (8) but the latter did not look very comfortable despite good batting conditions.
Dhawan was caught at square leg, thanks to a leaping effort from skipper Dinesh Chandimal, a second dismissal against the run of play as he was just looking to cut loose with a flurry of boundaries.
"When you work hard and it pays dividends, it gives you a lot of satisfaction. Even when I was not in the Indian team, I was still enjoying my game at the domestic level and following the process that is needed at this level," Dhawan said after his innings.
India: 329/6 (Shikhar Dhawan 119, Lokesh Rahul 85; Malinda Pushpakumara 3/40).