日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复

發(fā)布時間:2024/4/11 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 日志結構
  • 讀寫流程
    • 寫入
    • 讀取
  • 崩潰恢復

當向 LevelDB 寫入數(shù)據(jù)時,只需要將數(shù)據(jù)寫入內(nèi)存中的 MemTable,而由于內(nèi)存是易失性存儲,因此 LevelDB 需要一個額外的持久化文件:預寫日志(Write-Ahead Log,WAL),又稱重做日志。這是一個追加修改、順序寫入磁盤的文件。當宕機或者程序崩潰時 WAL 能夠保證寫入成功的數(shù)據(jù)不會丟失。將 MemTable 成功寫入 SSTable 后,相應的預寫日志就可以刪除了。

日志結構

Log 文件以塊為基本單位,一條記錄可能全部寫到一個塊上,也可能跨幾個塊。記錄的格式如下圖所示:

Log記錄格式


首先我們來看看 Log 中的數(shù)據(jù)格式,代碼如下:

// https://github.com/google/leveldb/blob/master/db/log_format.hnamespace log {enum RecordType {// Zero is reserved for preallocated fileskZeroType = 0,kFullType = 1,// For fragmentskFirstType = 2,kMiddleType = 3,kLastType = 4};static const int kMaxRecordType = kLastType;static const int kBlockSize = 32768;// Header is checksum (4 bytes), length (2 bytes), type (1 byte).static const int kHeaderSize = 4 + 2 + 1;} // namespace log

結合上面的代碼和圖片,我們可以看到每一個塊大小為 32768 字節(jié),并且每一個塊由頭部和正文組成。頭部由 4 字節(jié)校驗,2 字節(jié)的長度與 1 字節(jié)的類型構成,即每一個塊的開始 7 字節(jié)屬于頭部。頭部中的類型字段有如下 4 種:

  • kZeroType:為預分配的文件保留。
  • kFullType:表示一條記錄完整地寫到了一個塊上。
  • kFirstType:表示該條記錄的第一部分。
  • kMiddleType:表示該條記錄的中間部分。
  • kLastType:表示該條記錄的最后一部分。

通過記錄結構可以推測出 Log 文件的讀取流程,即首先根據(jù)頭部的長度字段確定需要讀取多少字節(jié),然后根據(jù)頭部類型字段確定該條記錄是否已經(jīng)完整讀取,如果沒有完整讀取,繼續(xù)按該流程進行,直到讀取到記錄的最后一部分,其頭部類型為 kLastType。


讀寫流程

寫入

Log 的讀取主要由 Writer 中的 AddRecord 實現(xiàn),代碼如下:

// https://github.com/google/leveldb/blob/master/db/log_writer.hclass Writer {public:explicit Writer(WritableFile* dest);Writer(WritableFile* dest, uint64_t dest_length);Writer(const Writer&) = delete;Writer& operator=(const Writer&) = delete;~Writer();Status AddRecord(const Slice& slice);private:Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length);WritableFile* dest_;int block_offset_; // Current offset in blockuint32_t type_crc_[kMaxRecordType + 1]; };// https://github.com/google/leveldb/blob/master/db/log_writer.ccStatus Writer::AddRecord(const Slice& slice) {const char* ptr = slice.data();size_t left = slice.size();Status s;//begin表明本條記錄是第一次寫入,即當前塊中第一條記錄bool begin = true;do {//當前塊剩余空間,用于判斷頭部能否完整寫入const int leftover = kBlockSize - block_offset_;assert(leftover >= 0);if (leftover < kHeaderSize) {//如果塊剩余空間小于七個字節(jié)且不等于0,說明當前無法完整寫入數(shù)據(jù),此時填充\x00,從下一個塊寫入if (leftover > 0) {static_assert(kHeaderSize == 7, "");dest_->Append(Slice("\x00\x00\x00\x00\x00\x00", leftover));}//此時塊正好寫滿,將block_offset_置為0,表明開始寫入新的塊block_offset_ = 0;}assert(kBlockSize - block_offset_ - kHeaderSize >= 0);//計算塊剩余空間const size_t avail = kBlockSize - block_offset_ - kHeaderSize;//計算當前塊能夠寫入的數(shù)據(jù)大小(塊剩余空間和記錄剩余內(nèi)容中最小的)const size_t fragment_length = (left < avail) ? left : avail;RecordType type;//end表明該記錄是否已經(jīng)完整寫入,即最后一條記錄const bool end = (left == fragment_length);//根據(jù)begin與end來確定記錄類型if (begin && end) {//記錄為第一條且同時又是最后一條,說明當前是完整的記錄,狀態(tài)為kFullTypetype = kFullType;} else if (begin) {//記錄為第一條,狀態(tài)為kFirstTypetype = kFirstType;} else if (end) {//記錄為最后一條,標記狀態(tài)為kLastTypetype = kLastType;} else {//記錄不為第一條,也并非最后一條,則說明是中間狀態(tài),標記為kMiddleTypetype = kMiddleType;}//將數(shù)據(jù)按照格式寫入,并刷新到磁盤文件中s = EmitPhysicalRecord(type, ptr, fragment_length);ptr += fragment_length;left -= fragment_length;begin = false;} while (s.ok() && left > 0);//循環(huán)至數(shù)據(jù)完全寫入或者寫入失敗時才停止return s; }

寫入流程如下:

  • 判斷頭部能否完整寫入,如果不能則將剩余空間用 \x00 填充,接著從新的塊開始寫入。
  • 根據(jù) begin 和 end 判斷記錄類型。
  • 將數(shù)據(jù)按照格式寫入,并刷新到磁盤文件中。
  • 循環(huán)至數(shù)據(jù)完全寫入或者寫入失敗后停止,將結果返回。

  • 讀取

    Log 的讀取主要由 Reader 中的 ReadRecord 實現(xiàn),代碼如下:

    // https://github.com/google/leveldb/blob/master/db/log_reader.hclass Reader {public:// Interface for reporting errors.class Reporter {public:virtual ~Reporter();virtual void Corruption(size_t bytes, const Status& status) = 0;};Reader(SequentialFile* file, Reporter* reporter, bool checksum,uint64_t initial_offset);Reader(const Reader&) = delete;Reader& operator=(const Reader&) = delete;~Reader();bool ReadRecord(Slice* record, std::string* scratch);uint64_t LastRecordOffset();private:enum {kEof = kMaxRecordType + 1,kBadRecord = kMaxRecordType + 2}; };// https://github.com/google/leveldb/blob/master/db/log_reader.ccbool Reader::ReadRecord(Slice* record, std::string* scratch) {if (last_record_offset_ < initial_offset_) {if (!SkipToInitialBlock()) {return false;}}scratch->clear();record->clear();bool in_fragmented_record = false;uint64_t prospective_record_offset = 0;Slice fragment;while (true) {//ReadPhysicalRecord讀取log文件并將記錄保存到fragment,同時返回記錄的類型const unsigned int record_type = ReadPhysicalRecord(&fragment);uint64_t physical_record_offset =end_of_buffer_offset_ - buffer_.size() - kHeaderSize - fragment.size();if (resyncing_) {if (record_type == kMiddleType) {continue;} else if (record_type == kLastType) {resyncing_ = false;continue;} else {resyncing_ = false;}}//根據(jù)記錄的類型來判斷是否需要將當前記錄附加到scratch后并繼續(xù)讀取switch (record_type) {//類型為kFullType則說明當前是完整的記錄,直接賦值給record后返回case kFullType:if (in_fragmented_record) {if (!scratch->empty()) {ReportCorruption(scratch->size(), "partial record without end(1)");}}prospective_record_offset = physical_record_offset;scratch->clear();*record = fragment;last_record_offset_ = prospective_record_offset;return true;//類型為kFirstType則說明當前是第一部分,先將記錄復制到scratch后繼續(xù)讀取case kFirstType:if (in_fragmented_record) {if (!scratch->empty()) {ReportCorruption(scratch->size(), "partial record without end(2)");}}prospective_record_offset = physical_record_offset;scratch->assign(fragment.data(), fragment.size());in_fragmented_record = true;break;//類型為kMiddleType則說明當前是中間部分,先將記錄追加到scratch后繼續(xù)讀取case kMiddleType://初始讀取到的類型為kMiddleType或者kLastType,則需要忽略并且繼續(xù)偏移if (!in_fragmented_record) {ReportCorruption(fragment.size(),"missing start of fragmented record(1)");} else {scratch->append(fragment.data(), fragment.size());}break;//類型為kLastType則說明當前為最后,繼續(xù)追加到scratch,并將scratch賦值給record并返回case kLastType:if (!in_fragmented_record) {ReportCorruption(fragment.size(),"missing start of fragmented record(2)");} else {scratch->append(fragment.data(), fragment.size());*record = Slice(*scratch);last_record_offset_ = prospective_record_offset;return true;}break;//如果狀態(tài)為kEof、kBadRecord時說明日志損壞,此時清空scratch并返回falsecase kEof:if (in_fragmented_record) {scratch->clear();}return false;case kBadRecord:if (in_fragmented_record) {ReportCorruption(scratch->size(), "error in middle of record");in_fragmented_record = false;scratch->clear();}break;//未定義的類型,輸出日志,剩余同上處理default: {char buf[40];std::snprintf(buf, sizeof(buf), "unknown record type %u", record_type);ReportCorruption((fragment.size() + (in_fragmented_record ? scratch->size() : 0)),buf);in_fragmented_record = false;scratch->clear();break;}}}return false; }

    執(zhí)行流程如下:

  • ReadRecord 讀取一條記錄到 fragment 變量中,并且返回該條記錄的類型。
  • 根據(jù)記錄的類型來判斷是否需要將當前記錄附加到 scratch 后并繼續(xù)讀取:
    • kFullType:當前是完整的記錄,直接賦值給 record 后返回。
    • kFirstType:當前是第一部分,先將記錄覆蓋到 scratch 后繼續(xù)讀取。
    • kMiddleType:當前是中間部分,先將記錄追加到 scratch 后繼續(xù)讀取。
    • kLastType:當前為最后部分,繼續(xù)追加到 scratch,并將完整的 scratch 賦值給 record 后返回。
    • 其它/異常:清空 scratch 并返回 false,如果是未定義類型需要輸出日志。
  • 這里還有一個需要注意的細節(jié),由于讀取 Log 文件時可以從指定偏移量開始,所以如果初始讀取到的類型為 kMiddleType 或者 kLastType,則需要忽略并且繼續(xù)偏移,直到碰見第一個 kFirstType。


    崩潰恢復

    當打開一個 LevelDB 的數(shù)據(jù)文件時,需先檢驗是否進行崩潰恢復,如果需要,則會從 Log 文件生成一個MemTable,其實現(xiàn)代碼如下:

    // https://github.com/google/leveldb/blob/master/db/db_impl.ccStatus DBImpl::RecoverLogFile(uint64_t log_number, bool last_log,bool* save_manifest, VersionEdit* edit,SequenceNumber* max_sequence) {struct LogReporter : public log::Reader::Reporter {Env* env;Logger* info_log;const char* fname;Status* status; // null if options_.paranoid_checks==falsevoid Corruption(size_t bytes, const Status& s) override {Log(info_log, "%s%s: dropping %d bytes; %s",(this->status == nullptr ? "(ignoring error) " : ""), fname,static_cast<int>(bytes), s.ToString().c_str());if (this->status != nullptr && this->status->ok()) *this->status = s;}};mutex_.AssertHeld();//打開log文件std::string fname = LogFileName(dbname_, log_number);SequentialFile* file;Status status = env_->NewSequentialFile(fname, &file);if (!status.ok()) {MaybeIgnoreError(&status);return status;}//創(chuàng)建log reader.LogReporter reporter;reporter.env = env_;reporter.info_log = options_.info_log;reporter.fname = fname.c_str();reporter.status = (options_.paranoid_checks ? &status : nullptr);log::Reader reader(file, &reporter, true /*checksum*/, 0 /*initial_offset*/);Log(options_.info_log, "Recovering log #%llu",(unsigned long long)log_number);//讀取所有的records并寫入一個memtablestd::string scratch;Slice record;WriteBatch batch;int compactions = 0;MemTable* mem = nullptr;//循環(huán)讀取日志文件while (reader.ReadRecord(&record, &scratch) && status.ok()) {if (record.size() < 12) {reporter.Corruption(record.size(),Status::Corruption("log record too small"));continue;}WriteBatchInternal::SetContents(&batch, record);if (mem == nullptr) {mem = new MemTable(internal_comparator_);mem->Ref();}//將records寫入memtablestatus = WriteBatchInternal::InsertInto(&batch, mem);MaybeIgnoreError(&status);if (!status.ok()) {break;}const SequenceNumber last_seq = WriteBatchInternal::Sequence(&batch) +WriteBatchInternal::Count(&batch) - 1;if (last_seq > *max_sequence) {*max_sequence = last_seq;}//如果memtable大于閾值,則將其轉換成sstable(默認4MB) if (mem->ApproximateMemoryUsage() > options_.write_buffer_size) {compactions++;*save_manifest = true;status = WriteLevel0Table(mem, edit, nullptr);mem->Unref();mem = nullptr;if (!status.ok()) {break;}}}delete file;//判斷是否應該繼續(xù)重復使用最后一個日志文件if (status.ok() && options_.reuse_logs && last_log && compactions == 0) {assert(logfile_ == nullptr);assert(log_ == nullptr);assert(mem_ == nullptr);uint64_t lfile_size;if (env_->GetFileSize(fname, &lfile_size).ok() &&env_->NewAppendableFile(fname, &logfile_).ok()) {Log(options_.info_log, "Reusing old log %s \n", fname.c_str());log_ = new log::Writer(logfile_, lfile_size);logfile_number_ = log_number;if (mem != nullptr) {mem_ = mem;mem = nullptr;} else {mem_ = new MemTable(internal_comparator_);mem_->Ref();}}}if (mem != nullptr) {if (status.ok()) {*save_manifest = true;status = WriteLevel0Table(mem, edit, nullptr);}mem->Unref();}return status; }

    具體的邏輯如下:

  • 打開 log,創(chuàng)建 log reader 開始讀取數(shù)據(jù)。
  • 循環(huán)讀取日志文件,并將其寫入 MemTable 中。
  • 如果 MemTable 過大,則將其轉換為 SSTable。
  • 總結

    以上是生活随笔為你收集整理的LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    香蕉视频在线看 | 日韩精品在线免费播放 | 久久精品欧美一区 | 深夜免费福利网站 | 香蕉在线影院 | 国产99久久久国产精品免费看 | 久久免费视频在线观看30 | 免费在线一区二区 | 九九九九热精品免费视频点播观看 | 国产粉嫩在线观看 | 国内精品视频久久 | 在线视频观看你懂的 | 国产在线小视频 | 97人人超碰在线 | 色综合久久久久久中文网 | 欧美在线视频精品 | 日本精品久久久一区二区三区 | 久久久久国产一区二区三区四区 | 国产在线观看免 | 青草视频免费观看 | 国产精品久久久久久久久婷婷 | 久久视频一区 | 国产做aⅴ在线视频播放 | 国产专区在线看 | 粉嫩av一区二区三区入口 | 成片视频在线观看 | 综合天堂av久久久久久久 | 韩国av免费在线观看 | 中文字幕在线观看一区二区三区 | 亚洲爱av| 久爱综合| 国产精品99久久久久久久久久久久 | 国产不卡一 | 西西大胆免费视频 | 99久久久久国产精品免费 | 91精品视频免费在线观看 | 丝袜美女在线 | 成人网在线免费视频 | 国产一区二区在线免费播放 | 日韩中文字幕国产 | 午夜性福利 | 免费在线播放 | 免费在线观看不卡av | 亚洲国产wwwccc36天堂 | 国产精品字幕 | 色婷婷五 | 91成人国产| 精品欧美一区二区三区久久久 | 91看成人 | www.午夜色.com | 波多野结衣视频一区二区三区 | www178ccom视频在线 | 日韩视频 一区 | 亚洲激情综合 | 国产精品久久久久久久久久久久午 | 狠狠色丁香久久婷婷综合五月 | 精品美女在线视频 | 99视频网站 | 精品亚洲国产视频 | 天天综合天天做天天综合 | 亚洲激情久久 | 91大神精品视频 | 99精品国产免费久久 | 国产视频日韩视频欧美视频 | 91在线91| 91女人18片女毛片60分钟 | 91成人精品国产刺激国语对白 | 亚洲黄色av一区 | 少妇啪啪av入口 | 久久avav | 1000部国产精品成人观看 | 精品国产一区二区三区噜噜噜 | 欧美va天堂va视频va在线 | 国产五月天婷婷 | 久久一精品 | 亚洲精品中文字幕视频 | 国产精品一区二区三区免费视频 | av成人免费 | 婷婷av综合 | 91成人精品一区在线播放69 | 最新国产精品亚洲 | 亚洲精品久久久久久久蜜桃 | 日韩素人在线观看 | 精品久久1| 日韩电影在线看 | 精品一区二区在线播放 | 狠狠色丁香婷婷综合 | 97超碰资源 | 国产亚州精品视频 | 蜜桃av观看| 91麻豆精品91久久久久同性 | 日日爱999| 久久精品国产精品亚洲 | 中文字幕黄色 | 国产99久久九九精品 | 视频成人免费 | 一区二区三区日韩视频在线观看 | 99视频在线| 午夜av一区 | 98超碰在线 | 久久国产品 | 五月天婷婷在线播放 | 欧美疯狂性受xxxxx另类 | 久久久国产影院 | 蜜臀av.com | 69久久久久久久 | 97色国产| 狠狠地操| 在线观看亚洲精品 | 国内视频 | 色综合天天干 | 色综合天天色 | 国产va精品免费观看 | 久草视频中文在线 | 国产成人亚洲在线观看 | 国产精品一区电影 | 操综合 | www.99热精品 | 亚洲电影图片小说 | 超碰国产在线播放 | 91精品国自产在线 | 日本午夜在线亚洲.国产 | 激情片av| av先锋中文字幕 | 免费激情网 | 国产91大片 | 久草在线视频在线 | 亚洲精品videossex少妇 | 久久69精品久久久久久久电影好 | 日韩网站在线 | 69久久99精品久久久久婷婷 | 日韩欧美精品在线观看视频 | 国产精品二区在线观看 | 久久精品播放 | 亚在线播放中文视频 | 17婷婷久久www | 人人澡av| 欧美激情综合五月色丁香小说 | 国产精品久久久久永久免费看 | 91资源在线观看 | 精品亚洲一区二区三区 | 色婷婷国产精品一区在线观看 | 24小时日本在线www免费的 | 日本韩国精品一区二区在线观看 | 99精品视频网 | 中国老女人日b | 综合久久五月天 | 最新av网站在线观看 | 国产欧美最新羞羞视频在线观看 | 久久五月网 | 九九精品久久久 | 国产成人777777| 中文字幕久久久精品 | 亚洲自拍av在线 | 久久精品视频观看 | 国产91对白在线 | 97超碰国产精品女人人人爽 | 色综合久久88色综合天天人守婷 | 久久免费国产电影 | 亚洲成av人影院 | 日韩最新中文字幕 | 九九久久成人 | 日本资源中文字幕在线 | 国产高清免费观看 | 97中文字幕| 国产精品av免费在线观看 | 国产999精品久久久久久 | av看片网| 午夜天使| 特级a老妇做爰全过程 | 国产又粗又硬又爽的视频 | 91网站免费观看 | 色偷偷网站视频 | 亚洲视屏在线播放 | 国产精品1区2区在线观看 | av片免费播放 | 久久精品网站视频 | 99热这里只有精品国产首页 | 国产亚洲精品美女久久 | 正在播放亚洲精品 | 啪嗒啪嗒免费观看完整版 | 免费激情在线电影 | 亚洲人成在线观看 | 中文字幕免费成人 | 中文字幕一区二区三区久久 | 一级黄毛片 | 国产亚洲精品久久网站 | 91精品国产一区二区三区 | 亚洲免费一级电影 | 天天操天天谢 | 丁香六月在线 | 久久国产精品网站 | 欧美成人理伦片 | 久久视频在线视频 | 色综合天天射 | 欧美精品二 | 久久免费激情视频 | 玖玖国产精品视频 | a黄色一级片| 国产美女精彩久久 | 国产精品www| 天天天射| 91试看 | 精品高清视频 | 热久久国产 | 日韩一区精品 | 欧美精品在线视频 | 久久97精品 | 黄色一级大片在线观看 | 69视频在线播放 | 国产成人一区二区三区在线观看 | 日韩精品一区二区三区在线视频 | 91久久人澡人人添人人爽欧美 | 久久精品国产精品亚洲 | 欧美成人91| 精品一区二区在线观看 | 欧美在线a视频 | 97超碰香蕉 | 超碰个人在线 | 毛片二区| av高清免费 | av网站在线观看免费 | 一区二区三区四区免费视频 | 成人午夜电影免费在线观看 | 国产精品久久久久久久久久直播 | 亚洲视频久久 | 国际精品网| 蜜桃av综合网 | 久久一区二区免费视频 | 丁香婷五月 | 日韩国产精品久久久久久亚洲 | 久久国产手机看片 | av在线永久免费观看 | 黄p在线播放 | 久久久www免费电影网 | www黄色com| 超碰九九| 亚洲精品合集 | 久久精品视频在线观看免费 | 久久影院精品 | 久久久久久久av麻豆果冻 | 天天鲁天天干天天射 | 狠狠色丁香婷婷综合最新地址 | 免费观看黄 | 丁香六月伊人 | 国产一区网址 | 亚洲va欧洲va国产va不卡 | 天天插综合网 | 亚洲欧洲成人精品av97 | 综合久色| 永久免费精品视频 | 中文字幕日本在线观看 | 一区二区日韩av | 久久草网| 日韩视频欧美视频 | 探花视频在线观看 | av中文字幕网址 | 欧美va天堂va视频va在线 | 亚洲国产精品传媒在线观看 | 五月激情丁香图片 | 中文在线免费看视频 | 亚洲国产伊人 | 丁香婷婷基地 | 九热在线 | 精品你懂的 | 亚洲欧美乱综合图片区小说区 | 国精产品999国精产品岳 | www.色午夜,com| 欧美精品天堂 | 91精品视频一区 | 天天爽天天爽夜夜爽 | 国产精品第 | 一级理论片在线观看 | 中文字幕高清在线播放 | 久久久91精品国产一区二区精品 | 91久久久久久久一区二区 | 91网站在线视频 | 久久久久草 | 久久久久久久久久久久av | 开心激情婷婷 | 不卡的一区二区三区 | 午夜精品一区二区三区免费 | 久久99国产一区二区三区 | 久久久影院官网 | 91麻豆网站| 国产五月色婷婷六月丁香视频 | 亚洲精品激情 | 成人禁用看黄a在线 | 成人av资源在线 | 激情综合狠狠 | 精品久久免费 | 久久久久久久久精 | 夜夜躁天天躁很躁波 | 国产高清av免费在线观看 | 激情五月激情综合网 | 国产精品12 | 婷婷久久丁香 | 午夜少妇一区二区三区 | 欧美日韩精品在线观看 | 99久久精品免费看国产一区二区三区 | 免费69视频| 国产一区二区三区四区在线 | 天天射天天干天天 | 亚洲国产成人精品久久 | 99精品热视频 | 美女精品网站 | 中文字幕av在线 | 91插插影库| 亚洲天堂色婷婷 | 国产麻豆传媒 | 日韩高清一二区 | 成人国产亚洲 | 日本精品久久久久影院 | 一级片黄色片网站 | 日韩在线网 | 不卡av在线 | 91国内产香蕉 | 国产成人精品一区一区一区 | 亚洲日本国产精品 | 久射网| 2021久久 | 丝袜美腿在线视频 | 正在播放亚洲精品 | 97韩国电影 | 在线看黄色av | 亚洲精品国产第一综合99久久 | 91麻豆.com| 久久调教视频 | 日韩亚洲精品电影 | 欧美人人 | 亚洲美女在线国产 | 免费福利视频导航 | 国产一区二区电影在线观看 | 国产精品一区二区三区久久久 | 麻豆视频在线观看免费 | av在线影片 | 久久久久久久久久久黄色 | 超碰在线人人艹 | 超碰人人91 | 日韩av电影免费在线观看 | 欧美精品中文在线免费观看 | 特级西西444www大精品视频免费看 | 亚洲综合五月天 | 水蜜桃亚洲一二三四在线 | 97香蕉久久国产在线观看 | 搡bbbb搡bbb视频| 日韩成人免费在线观看 | 91天天操 | avlulu久久精品 | 国产精品久久久久一区二区三区 | www亚洲一区| 欧美一级黄色网 | 五月天亚洲精品 | 国产亚洲视频在线观看 | 中文字幕中文字幕在线一区 | 中文字幕人成人 | 最近最新中文字幕视频 | 狠狠狠狠狠狠操 | 国产精品综合在线观看 | 欧美99热 | 东方av免费在线观看 | 久久这里只有精品视频首页 | 在线观看免费91 | 国产一区自拍视频 | 国产日韩精品在线观看 | 婷婷色影院| 久久国内精品99久久6app | 国产激情电影综合在线看 | 国产黄色av影视 | 91免费观看视频网站 | 综合婷婷丁香 | 欧美一区影院 | av综合站 | 久久av中文字幕片 | 91网在线看| 99成人精品| 精品国产乱码一区二 | 国产精品白浆 | 国产视频1区2区 | 欧美在线99| 伊人永久在线 | 欧美aaa一级 | 国产一区二区在线免费观看 | 国产成人在线免费观看 | 九九视频一区 | 久久久免费观看完整版 | 99久久久国产精品美女 | 成人av免费在线观看 | 天天干天天拍 | 久草免费福利在线观看 | 久久婷婷国产色一区二区三区 | 欧美性生交大片免网 | 超碰av在线 | 色婷婷亚洲 | 国产成人精品亚洲 | 玖玖玖国产精品 | 日韩免费在线 | 黄色小说视频在线 | 国产乱码精品一区二区三区介绍 | 日本久久中文字幕 | 欧美资源 | 国产精品自产拍在线观看中文 | 天天干天天操天天干 | 久久99精品国产麻豆宅宅 | 嫩草av影院 | 国产精品一区二区电影 | 麻豆av一区二区三区在线观看 | 66av99精品福利视频在线 | 在线观看自拍 | 亚洲欧美乱综合图片区小说区 | 超碰电影在线观看 | 日韩电影一区二区在线 | 国产香蕉久久 | 在线免费观看视频你懂的 | 国产资源网 | 国产亚洲精品久久久网站好莱 | 在线激情小视频 | 久久电影国产免费久久电影 | 日韩高清不卡一区二区三区 | 超碰97网站 | 精品亚洲二区 | 亚洲精品乱码久久久久久按摩 | 亚洲成人av在线播放 | 亚洲成av人片在线观看www | 久久人人爽人人片 | 日韩三级成人 | 97国产一区二区 | 亚洲成人精品久久久 | 亚洲三级在线免费观看 | 国产精品嫩草影院99网站 | 精品国产伦一区二区三区免费 | 99爱国产精品 | 免费黄色a网站 | 91av在线免费 | 九九欧美视频 | 日本黄色免费电影网站 | 免费看污网站 | 一级片免费观看视频 | 亚洲精品午夜视频 | 日韩久久视频 | 国产美腿白丝袜足在线av | 亚洲一区二区黄色 | 激情综合电影网 | 天天干夜夜爱 | 天天操天天操 | 国产区欧美 | 国产中文视频 | 中文字幕色播 | 成人小视频在线播放 | 午夜 免费 | 日韩精品高清不卡 | 欧美日韩精品二区第二页 | 黄色成品视频 | 久久久久久久久久伊人 | 中文字幕在线观看完整 | 免费韩国av | 97成人在线免费视频 | 99热这里只有精品免费 | 日韩高清一 | 欧美另类高清 videos | 婷婷色综合 | 精品人人人人 | 一区二区三区电影大全 | 免费福利视频导航 | 欧美无极色 | 国产高清福利在线 | 青春草免费在线视频 | 午夜精品一区二区三区在线 | 成人综合婷婷国产精品久久免费 | 天天操天天操天天操天天操 | 日本二区三区在线 | 欧美激情第八页 | 国产一级特黄毛片在线毛片 | 色视频在线观看 | 九九免费观看全部免费视频 | www.午夜| 精品国产一区在线观看 | 一区二区三区日韩精品 | 91最新中文字幕 | 国产乱码精品一区二区蜜臀 | 久久综合九色综合欧美就去吻 | 欧美怡红院视频 | 男女啪啪视屏 | 96亚洲精品久久 | 激情av网址 | 玖玖视频精品 | 国产免码va在线观看免费 | 中文字幕免费一区二区 | 日韩电影一区二区在线 | 国产护士在线 | 狠狠综合 | 欧美一级免费在线 | 日韩视 | 久草电影网 | 91试看| 国产午夜精品久久 | 国产黄色精品在线 | 狠狠干在线 | 国产精品久一 | 成人免费av电影 | 韩国av不卡 | 国产a国产a国产a | 黄色资源在线观看 | 一区二区av | 久久激情五月婷婷 | 毛片网站在线观看 | 国产欧美综合在线观看 | 婷婷色六月天 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 在线观看岛国片 | 天天摸夜夜添 | 国内精品久久天天躁人人爽 | 欧美亚洲三级 | www.99久久.com | 在线观看片 | 国产一卡二卡四卡国 | 中文字幕av在线播放 | 久久免费精品国产 | 69视频永久免费观看 | 久草在线视频首页 | 久草观看视频 | 福利电影一区二区 | 日韩欧美一区二区三区黑寡妇 | 久久久久久精 | 精品二区视频 | 国产精品久久久久久久久软件 | 一级黄视频 | 久久视频免费在线 | 欧美色久| av中文天堂| 蜜桃av久久久亚洲精品 | 成人资源在线播放 | 亚洲精品美女在线观看播放 | 久久久久久久99精品免费观看 | 免费观看一级成人毛片 | 免费在线观看av网站 | 亚洲高清资源 | 色综合天天狠天天透天天伊人 | 国产专区精品视频 | 国产亚洲成人网 | 五月开心六月伊人色婷婷 | 国产夫妻av在线 | 婷婷射五月 | 人人干在线 | 亚洲成人软件 | 天天玩天天干 | 韩日成人av | 成人av手机在线 | 91亚·色 | 久久视了 | 久久在现视频 | 久久久这里有精品 | 国产精品小视频网站 | 免费高清看电视网站 | 毛片二区 | 午夜精品电影一区二区在线 | 免费看色的网站 | 国产精品久久久av久久久 | 国产剧情在线一区 | 久久精品黄色 | 精品久久久免费 | 国产精品九九九九九九 | 亚洲欧美久久 | 国产九九在线 | 国产一区二区精品久久91 | 国产成人精品一区二 | 亚洲无人区小视频 | 国产又粗又猛又黄又爽 | 91色蜜桃 | 日韩欧美大片免费观看 | 久久久99精品免费观看app | 91人人在线| 久久久av电影 | 免费h精品视频在线播放 | 日韩欧美高清视频在线观看 | 久久免费看片 | 黄色综合 | 黄色网址a| 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲影视九九影院在线观看 | 国产韩国日本高清视频 | 欧美日韩精品影院 | 在线观看v片 | 日韩欧美一级二级 | 中文字幕视频播放 | 精品1区二区 | 黄色软件视频大全免费下载 | 欧美成人理伦片 | 国产偷v国产偷∨精品视频 在线草 | 国产亚洲人成网站在线观看 | 波多野结衣小视频 | 成人av电影免费在线播放 | 色综合久久五月 | 亚洲国产精品久久久久婷婷884 | 婷婷综合久久 | 在线91精品 | 久久艹综合 | 久久免费看a级毛毛片 | 欧美看片 | 91大神电影| 国产精品国产亚洲精品看不卡 | 国产精品美女久久久久久 | 婷婷在线免费观看 | 一区二区网 | 国产专区第一页 | 在线观看视频免费大全 | 婷婷色伊人 | 中文字幕在线播放av | 久久免费a | 中文国产字幕 | 久久一区二区三区日韩 | 国产一二三在线视频 | 久久久久综合 | 日韩高清免费观看 | 亚洲天天干 | 国产福利中文字幕 | 国产一区高清在线 | 激情文学综合丁香 | 手机看国产毛片 | 成年人在线免费视频观看 | 亚洲激精日韩激精欧美精品 | 亚洲午夜精品一区二区三区电影院 | 亚洲综合丁香 | 97视频在线观看成人 | 久久久久久久久影视 | 深爱激情婷婷网 | 香蕉免费在线 | 成人毛片a | 欧美日本一区 | 丁香婷婷久久久综合精品国产 | 欧美一二三在线 | 网站在线观看你们懂的 | 97视频免费播放 | 久久a v电影 | 狠狠操导航 | 中文字幕在线看 | 三级黄色在线观看 | 超碰在线观看av.com | 九九视频热 | 最近日本中文字幕 | 日韩欧美一区二区三区黑寡妇 | www夜夜 | 狠狠色噜噜狠狠狠 | 中文视频一区二区 | 黄色在线观看污 | 婷婷爱五月天 | 福利二区视频 | 午夜精品久久久久久久久久 | 亚洲欧美日韩精品久久奇米一区 | 91成人网在线 | 久青草影院 | 国内99视频 | 亚洲日b视频 | 免费在线观看国产黄 | 在线观看黄色的网站 | 四虎8848免费高清在线观看 | 在线观看av网站 | www成人av | 丁香在线观看完整电影视频 | 人人爽久久久噜噜噜电影 | www.夜夜爱 | 黄色软件视频大全免费下载 | 黄色a视频| 国产黄色精品在线 | 色视频网址 | 久久精品一区二区三区国产主播 | 免费91在线| 亚洲成人av一区 | 91成版人在线观看入口 | 91九色pron| 伊人色综合久久天天网 | 日本精品一 | 日日操天天操夜夜操 | 丁香五香天综合情 | 久久精品国产亚洲精品 | 成人高清在线观看 | 最近字幕在线观看第一季 | 欧美色综合 | 久久er99热精品一区二区三区 | 亚洲成人资源网 | www.99在线观看 | 国产91九色蝌蚪 | 亚洲精品一区二区三区新线路 | 中文av日韩 | 亚洲国产免费网站 | 天天激情天天干 | 国产精品亚 | 免费观看丰满少妇做爰 | 久久国产精品免费视频 | 午夜av在线播放 | 伊人狠狠色丁香婷婷综合 | 欧美精品免费在线观看 | 超碰成人免费电影 | 亚洲va在线va天堂 | 在线观看视频一区二区三区 | 一区二区三区四区在线免费观看 | 国产日韩一区在线 | 久久综合五月天婷婷伊人 | 精品国产一区二区三区久久久 | 日韩av网址在线 | 色五月色开心色婷婷色丁香 | 夜夜骑天天操 | 久久免费黄色 | av免费黄色 | 国产精品免费成人 | 国产一级黄色免费看 | 又黄又刺激又爽的视频 | 欧美日韩精品网站 | 久久精品女人毛片国产 | 99久久爱 | 日日干夜夜爱 | 午夜精品一区二区三区在线观看 | 99免费在线视频 | 91色亚洲 | 三级黄色欧美 | 国产亚洲精品日韩在线tv黄 | 狠狠色狠狠色综合日日小说 | 美女久久久久久久久久久 | 日韩美一区二区三区 | 日韩激情片在线观看 | 国产三级精品在线 | 国产九色视频在线观看 | 999久久久国产精品 高清av免费观看 | 欧美一级特黄高清视频 | 久久免费国产电影 | 狠狠色噜噜狠狠狠狠2021天天 | 亚洲高清在线观看视频 | 亚洲成成品网站 | www178ccom视频在线 | 91精品视频免费看 | 91大神在线看 | 亚洲激情六月 | 深爱激情站| 美女黄频在线观看 | 成年人视频免费在线播放 | 欧美日韩高清在线观看 | 国产精品va在线观看入 | 久久成人国产 | 成人av资源网站 | 国产美女免费观看 | 人人爽爽人人 | 中文免费在线观看 | 免费a v在线 | 91九色蝌蚪视频 | 中文字幕乱码在线播放 | 狠狠狠狠狠狠狠狠 | 91麻豆精品国产91久久久久久久久 | 91成人精品一区在线播放69 | 久久a国产 | 国产视频1 | 在线视频观看你懂的 | 欧美日韩在线视频一区二区 | 久久免费视频一区 | 97在线免费观看 | 国产群p| 69亚洲视频 | 91成版人在线观看入口 | 欧美性久久久 | av在线网站大全 | 免费人成在线观看 | 超碰人人国产 | 久久99国产综合精品 | 丝袜美腿在线播放 | 欧美在线aaa| 在线观看色网站 | 日韩一区二区三区观看 | 精品女同一区二区三区在线观看 | 国产91精品久久久久久 | 欧美日韩高清不卡 | 国产人在线成免费视频 | 97在线视频免费看 | 色综合五月天 | 69精品视频在线观看 | 手机在线视频福利 | 国产黄视频在线观看 | 国产精品1区2区3区 久久免费视频7 | 日韩在线免费视频 | 欧美 亚洲 另类 激情 另类 | 欧美日韩一区二区三区免费视频 | 国产一级视频 | 91久久久久久久 | 在线观看视频福利 | 久久久天堂 | 韩国精品一区二区三区六区色诱 | 天天操天天色综合 | 五月开心激情网 | 久久久资源 | 五月天亚洲综合 | 亚洲开心激情 | 久久99免费观看 | 91视频大全 | 国产99免费| 69久久久 | 日本激情动作片免费看 | 免费a一级 | 最近日韩中文字幕中文 | 国产一区二区在线视频观看 | 91精品欧美一区二区三区 | 99精品免费久久久久久日本 | 国产一区在线视频播放 | 国产精品video爽爽爽爽 | 欧美日韩中文在线视频 | 99国产精品视频免费观看一公开 | 六月丁香婷 | 夜夜爽夜夜操 | 国产精品福利午夜在线观看 | 国产一级片观看 | 中文字幕在线播放av | 免费在线观看黄网站 | 九九热在线精品 | 色开心 | 国产视频在线免费观看 | 黄色av网站在线观看免费 | 91精品一区国产高清在线gif | 久久久久欠精品国产毛片国产毛生 | 国产女v资源在线观看 | 日韩精品一区二区三区免费视频观看 | 色综合天天射 | 国产91全国探花系列在线播放 | 1区2区3区在线观看 三级动图 | 色网站在线 | 中文字幕一区在线 | 国产日本在线观看 | 草久视频在线观看 | 精品国内自产拍在线观看视频 | 国产日韩欧美在线 | 久香蕉| 国产精品18久久久久vr手机版特色 | 蜜臀av性久久久久av蜜臀三区 | 在线亚洲日本 | 天堂av在线免费 | 亚洲免费色 | 999久久国产精品免费观看网站 | 蜜臀精品久久久久久蜜臀 | 黄色电影网站在线观看 | 亚洲妇女av | 在线观看视频你懂得 | 色吊丝在线永久观看最新版本 | 美女网站在线看 | 久久新视频 | 四虎成人免费影院 | 成人在线视频在线观看 | 天天射日 | 国产黄色特级片 | 97小视频| 久久激情五月婷婷 | 黄色大片日本 | 超碰人人舔 | 四虎成人精品 | 一区二区三区四区五区在线视频 | 欧美午夜久久 | 人人爽人人做 | 国产精品久久久久久五月尺 | 精品在线二区 | 超碰在线人人爱 | 一区二区电影在线观看 | 国产精品网红直播 | 在线视频欧美亚洲 | 91亚洲夫妻| 日韩在线激情 | 九九热只有这里有精品 | 日韩视频图片 | 久久久2o19精品 | 中文字幕在线观看完整版电影 | 久久草草影视免费网 | 91亚洲视频在线观看 | 亚洲精品在线一区二区三区 | 欧美精品一区二区蜜臀亚洲 | 五月婷婷在线视频观看 | 中文字幕在线观 | av黄色影院 | 日韩亚洲在线观看 | 美女视频黄是免费的 | 久久婷婷激情 | 91日韩免费 | 免费av看片 | 国产男男gay做爰 | 91视频久久 | 91精品免费在线观看 | www.xxxx变态.com | 中文字幕在线播放一区 | 久久久久久99精品 | 精品久久久久一区二区国产 | 中文字幕久久亚洲 | 久久热首页 | 国产亚洲精品久久久久久 | 国产精品久久久久久久久久久久午夜片 | 天天五月天色 | 精品国产色 | 国产91成人在在线播放 | 亚洲激情校园春色 | 久久综合操 | 国产精品免费观看视频 | 国产系列 在线观看 | 毛片一区二区 | 国产精品麻豆99久久久久久 | 国产中文字幕91 | 国产精品永久免费观看 | 99视频精品全国免费 | 亚洲砖区区免费 | 中文字幕在线观看国产 | 久久色视频 | 久久久精品日本 | 国产91免费在线 | 999久久国产精品免费观看网站 | 久久久在线视频 | 九九热只有这里有精品 | 人人搞人人干 | 黄色免费观看视频 | 国产精品久久久一区二区三区网站 | 色射爱| 免费国产ww | 成人在线视频观看 | 成年人在线免费看 | 在线中文字幕网站 | 成人97视频 | 丁香花在线观看免费完整版视频 | 最新色站 | 99色免费| 国产视频精品久久 | 国产精品自拍av | 天天草天天干天天 | 亚洲另类人人澡 | www.888.av| 国产精品资源 | a天堂一码二码专区 | 欧美最新另类人妖 | 久久另类小说 | 日韩色在线观看 | 国产高清在线 | 开心色停停 | 国产精品porn | 国产剧在线观看片 | 黄a网 | 国产精品久久久久久久久久久不卡 | 色999五月色 | 性日韩欧美在线视频 | 亚洲高清久久久 | 91插插影库 | 香蕉91视频| 精品国产免费人成在线观看 | 色综合天天综合 | 91人人澡 | 91桃色免费视频 | 亚洲成人家庭影院 | 久久9精品| 亚洲人成人在线 | 99这里只有 | 欧美尹人| 欧美日韩国产精品一区二区三区 | 久久国产精品区 | 国产精品视频最多的网站 | 国产精品久久久久aaaa | 国产流白浆高潮在线观看 | 不卡国产视频 | 亚洲高清视频在线播放 | 91成人短视频在线观看 | 国产精品欧美久久久久无广告 | 黄色在线观看www | 精品久久久久国产 | 深爱开心激情 | 激情开心 | 在线国产精品一区 | 青青河边草观看完整版高清 | 九九精品视频在线观看 | 亚洲国产日韩在线 | 色在线免费观看 | 国产性xxxx| 少妇视频一区 | 日韩,中文字幕 | 久草在线免费播放 | 射射射av| 丁香婷婷久久久综合精品国产 | av资源免费在线观看 | 亚洲专区欧美专区 | 欧美亚洲国产精品久久高清浪潮 | 亚洲欧美日韩不卡 | 在线观看国产区 | 看av免费 | 久久夜色精品国产欧美一区麻豆 | 亚洲高清在线观看视频 | 麻豆传媒视频观看 | 国产高清免费在线观看 | 在线观看成人网 | 久久午夜视频 | 国产一区国产精品 | 久久精品一区二区三 | www.91成人| www.亚洲在线| 国产尤物在线视频 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 精品国产亚洲在线 | 久久久久福利视频 | 偷拍福利视频一区二区三区 | 国产精品久久久久久一区二区三区 | 最近乱久中文字幕 | 免费看久久久 | 97热在线观看 |