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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Zookeeper--Watcher机制源码剖析一

發布時間:2023/12/4 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Zookeeper--Watcher机制源码剖析一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Watcher-- 數據變更通知

  • 我們知道Zookeeper提供來分布式數據的訂閱/發布功能,一個典型的發布/訂閱模型系統定義了一種一對多的訂閱關系,能讓多個訂閱者同時監聽某個主題對象,當這個被監聽對象自身狀態發生變化時候,會通知所有訂閱者,Zookeeper中引入了Watcher機制來實現這種分布式通知功能,Zookeeper允許客戶端向服務器節點注冊一個Watcher監聽,當服務器端節點發生指定觸發的事件就會觸發這個Watcher,之后服務端會向指定客戶端發送一個事件通知,這樣來實現一個分布式通知的功能,如下圖所示的一個流程:
  • 上圖中流程,Zookeeper的Watcher機制主要包括客戶端線程,客戶端WatcherManager,和Zookeeper服務器,流程上簡單的說:
    • 客戶端向Zookeeper服務器注冊成功Watcher同時,將Watcher對象存儲在客戶端的WatcherManager
    • 當Zookeeper服務器觸發Watcher事件后,向客戶端發送通知
    • 客戶端線程從WatcherManager中撈出對應的Watcher對象來執行回調邏輯

Watcher接口

  • 在Zookeeper中,接口Watcher表示一個標準的事件處理器,訂閱來通知相關的邏輯,我們可以看他的源碼:
    • EventType:事件類型
    • KeeperState:通知狀態
    • Process(WatchedEvent event):會調方法
  • 其中事件類型和通知狀態是有對應關系,如下表中所示
KeeperStateEventType觸發條件解釋說明
SyncConnectedNone客戶端與服務器成功建立連接客戶端和服務器處于連接狀態
SyncConnectedNodeCreatedWatcher 監聽的對應數據節點成功創建客戶端和服務器處于連接狀態
SyncConnectedNodeDeletedWatcher監聽的數據節點成功刪除客戶端和服務器處于連接狀態
SyncConnectedNodeDataChangedWatcher監聽的數據節點內容變更客戶端和服務器處于連接狀態
SyncConnectedNodeChildrenChangedWatcher監聽的對應數據節點列表發生變更客戶端和服務器處于連接狀態
DisconnectedNone客戶端與Zookeeper服務器斷開連接客戶端和服務器斷開了連接
ExpiredNone會話超時客戶端回話失效,通常同時也會收到SessionExpiredException異常
AuthFailedNone兩種情況:使用錯誤scheme進行權限檢查, SASL權限檢查失敗通常同時收到AuthFailedException異常
Unknown3.1.0后廢棄
NoSYncConnected3.1.0后廢棄
  • 如上列舉了Zookeeper中常見的幾個通知狀態和事件類型,其中針對NodeDateChange事件說明的節點的變更并不一定是內容變化,可能版本號DataVersion變化也是一樣會觸發。

  • 回調方法process 是Watcher接口中的一個回調方法,當Zookeeper服務器端向客戶端發送一個Watcher事件通知的時候,客戶端會對相應的Process方法進行回調,從而實現對事件的處理,Process方法定義如下

void process(WatchedEvent event);
  • 如上參數WatcherEvent包含了一個事件的基本屬性:
public class WatchedEvent {private final KeeperState keeperState; //通知狀態private final EventType eventType; // 事件類型private String path; // 節點路徑/*** Create a WatchedEvent with specified type, state and path*/public WatchedEvent(EventType eventType, KeeperState keeperState, String path) {this.keeperState = keeperState;this.eventType = eventType;this.path = path;} ...... }
  • Zookeeper服務端生成WatchedEvent事件后會調用getWrapper方法將字節包裝成一個可序列化的WatcherEvent,其實這是一個事務,都是對服務端事件的一個封裝,不同的是WatchedEvent是我們邏輯事件中的一個對象,主要用來我們程序內部的事件容器,而WatcherEvent因為實現了序列化的接口,因此可以用于網絡傳輸
  • 在服務端得到WatcherEvent后,通過網絡傳到客戶端,還原成一個WatchedEvent,并傳遞給process,然后process方法根據入參就可以解析完整的服務端事件了。

工作機制

  • Zookeeper的Watcher機制可以有如下三個過程:
    • 客戶端注冊Watcher
    • 服務端處理watcher
    • 客戶端回調Watcher
  • 以下類圖說明各組件之間的關系:
客戶端注冊Watcher
  • 我們通過如下部分源碼來分析Watcher的客戶端注冊,我們創建一個Zookeeper的客戶端對象實例時,可以向構造方法中傳入一個默認的Watcher:
//我們調用的方法 public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException {this(connectString, sessionTimeout, watcher, false); } //實際上初始化的方法 public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly, HostProvider aHostProvider, ZKClientConfig clientConfig) throws IOException {LOG.info("Initiating client connection, connectString={} sessionTimeout={} watcher={}", new Object[]{connectString, Integer.valueOf(sessionTimeout), watcher});if(clientConfig == null) {clientConfig = new ZKClientConfig();}this.clientConfig = clientConfig;this.watchManager = this.defaultWatchManager();this.watchManager.defaultWatcher = watcher;ConnectStringParser connectStringParser = new ConnectStringParser(connectString);this.hostProvider = aHostProvider;this.cnxn = this.createConnection(connectStringParser.getChrootPath(), this.hostProvider, sessionTimeout, this, this.watchManager, this.getClientCnxnSocket(), canBeReadOnly);this.cnxn.start();}
  • 如上源碼中我們給定的Watcher對象實際上被保存在客戶端ZKWatcherManager的defaultWatcher中,另外Zookeeper客戶端也可以通過getData,getChildren,exist三個接口來向Zookeeper服務器注冊Watcher,無論哪一種都一樣,我們用getData方法的源碼來分析:
public byte[] getData(String path, Watcher watcher, Stat stat) throws KeeperException, InterruptedException {PathUtils.validatePath(path); //校驗Path格式正確性ZooKeeper.DataWatchRegistration wcb = null;if(watcher != null) {wcb = new ZooKeeper.DataWatchRegistration(watcher, path);//封裝DataWatchRegistration}String serverPath = this.prependChroot(path);RequestHeader h = new RequestHeader();h.setType(4);GetDataRequest request = new GetDataRequest();request.setPath(serverPath);request.setWatch(watcher != null);GetDataResponse response = new GetDataResponse();ReplyHeader r = this.cnxn.submitRequest(h, request, response, wcb);if(r.getErr() != 0) {throw KeeperException.create(Code.get(r.getErr()), path);} else {if(stat != null) {DataTree.copyStat(response.getStat(), stat);}return response.getData();}}
  • 如上源碼中參數Path, Watcher對象,getData接口注冊Watcher后,做了兩件事情
    • 先用這兩個參數封裝來一個DataWatchRegistration,其實就是初始化來Zookeeper服務器中的WatchRegistration里面的 watcher,clientPath,這部分用來暫時存儲注冊信息保存節點和Watcher的對應關系
    • 接著會向客戶端請求request進行標記,將其設置為“使用watcher監聽”。
  • 接著繼續往下SubmitRequest方法:
ReplyHeader r = this.cnxn.submitRequest(h, request, response, wcb); public ReplyHeader submitRequest(RequestHeader h,Record request,Record response,WatchRegistration watchRegistration,WatchDeregistration watchDeregistration) throws InterruptedException {ReplyHeader r = new ReplyHeader();Packet packet = queuePacket(h,r,request,response,null, null,null, null, watchRegistration, watchDeregistration);......return r;}
  • 這個步驟中又一次將ClientCnxn中的WatchRegistration封裝到Packet中,Zookeeper中,Packet可以被看作是一個最小通信協議單元,用于進行客戶端與服務器之間的網絡傳輸,任何需要傳輸的對象都需要包裝成一個Packet對象,接著他被放入發送隊列,如下queuePacket代碼:
public Packet queuePacket(RequestHeader h,ReplyHeader r,Record request,Record response,AsyncCallback cb,String clientPath,String serverPath,Object ctx,WatchRegistration watchRegistration,WatchDeregistration watchDeregistration) {Packet packet = null;// Note that we do not generate the Xid for the packet yet. It is// generated later at send-time, by an implementation of ClientCnxnSocket::doIO(),// where the packet is actually sent.packet = new Packet(h, r, request, response, watchRegistration);packet.cb = cb;packet.ctx = ctx;packet.clientPath = clientPath;packet.serverPath = serverPath;packet.watchDeregistration = watchDeregistration;// The synchronized block here is for two purpose:// 1. synchronize with the final cleanup() in SendThread.run() to avoid race// 2. synchronized against each packet. So if a closeSession packet is added,// later packet will be notified.synchronized (state) {......outgoingQueue.add(packet);....}
  • 我們繼續追這個outgoingQueue 隊列,可以看到隨后Zookeeper客戶端會向服務器端發送這個請求,同時等待請求的返回,王朝請求發送后,會由客戶端的SendThread線程的readResponse方法負責接受來自服務端的響應,finishPacket方法會從Packet中取出對于的Watcher并注冊到ZKWatcherManager中去。
protected void finishPacket(Packet p) {int err = p.replyHeader.getErr();if (p.watchRegistration != null) {p.watchRegistration.register(err);}......
  • 如Packet中的Watchregistration就是我們剛才第一步getData中保存的節點對應的Watcher的注冊信息。現在他又從這部分中取出來封裝的Watcher,如下具體的register方法:
public void register(int rc) {if (shouldAddWatch(rc)) {Map<String, Set<Watcher>> watches = getWatches(rc);synchronized (watches) {Set<Watcher> watchers = watches.get(clientPath);if (watchers == null) {watchers = new HashSet<Watcher>();watches.put(clientPath, watchers);}watchers.add(watcher);}}}//getWatchesprotected final ZKWatchManager watchManager;protected Map<String, Set<Watcher>> getWatches(int rc) {return watchManager.dataWatches;}
  • 如上register方法中客戶端將之前暫時保存的Watcher取出來之后,放入到getWatcher獲取到的一個Map對象中,這個Mp對象就是ZkWatcherManager中的一個dataWatches,我們將剛才存入WatchRegistration中的臨時信息取出用來初始化ZKWatchManager.dataWatches,用于將數據節點的路徑和watcher對象進行一一映射,這樣就完成來客戶端Watcher的注冊,整個Watcher流程如下

  • 如上流程中我們每次調用getData都會注冊一個Watcher,如果這些Watcher都隨著請求發送到服務器的話肯定會內存緊張,現實是這樣的碼,我們可以看之前代碼中負責傳輸數據的對象Packet中,我們將WatchRegistration封裝進去,如下Packet中的序列化方法createBB:

public void createBB() {try {ByteArrayOutputStream baos = new ByteArrayOutputStream();BinaryOutputArchive boa = BinaryOutputArchive.getArchive(baos);boa.writeInt(-1, "len"); // We'll fill this in laterif (requestHeader != null) {requestHeader.serialize(boa, "header");//封裝requestHeader}if (request instanceof ConnectRequest) {//封裝requestrequest.serialize(boa, "connect");// append "am-I-allowed-to-be-readonly" flagboa.writeBool(readOnly, "readOnly");} else if (request != null) {request.serialize(boa, "request");}baos.close();this.bb = ByteBuffer.wrap(baos.toByteArray());this.bb.putInt(this.bb.capacity() - 4);this.bb.rewind();} catch (IOException e) {LOG.warn("Unexpected exception", e);}}
  • 如上源碼中可以看到并沒有整個對象完全序列化進去,zookeeper只是將requestHeader和request兩個屬性進行序列化,WatchRegistration并沒有被序列化到底層字節數組中,所以不會進行網絡傳輸

服務端處理Watcher

  • 上面講解了客戶端注冊Watcher的過程,并且已經了解了最終客戶端不會將Watcher對象真正床底到服務器,那么,服務端是怎么樣完成客戶端的Watcher注冊,一下我們對這部分文件進行解析。
ServerCnxn存儲
  • 我們先看下服務器接收Watcher并將其存儲起來的過程,如下Zookeeper服務端處理Watcher序列圖:
  • 我們先從源頭分析客戶端給了服務器那些信息,如下Zookeeper類中getData方法的源碼:
...... RequestHeader h = new RequestHeader(); h.setType(ZooDefs.OpCode.getData); GetDataRequest request = new GetDataRequest(); request.setPath(serverPath); request.setWatch(watcher != null); GetDataResponse response = new GetDataResponse(); ......
  • 如上RequestHeader中type類型設置的 4 ,request中給定了節點path路徑,以及一個boolean類型的watcher標識是否天劍監聽。服務端收到來自客戶端的請求后,在FinalRequestProcessor.processRequest()中會判斷當前請求的類型type來做一個策略來決定處理不同類型的請求,如下源碼:
switch (request.type) { ......case OpCode.getData: {......Stat stat = new Stat();byte b[] = zks.getZKDatabase().getData(getDataRequest.getPath(), stat,getDataRequest.getWatch() ? cnxn : null);//為tru則會傳遞一個 ServerCnxn cnxn = request.cnxn;對象到實際的注冊方法中,否則給nullrsp = new GetDataResponse(b, stat);break;} ......}
  • 如上,從getData請求的處理邏輯可以看到當getDataRequest.getwatch為true的時候,Zookeeper就認為當前客戶端請求需要進行Watcher注冊,于是將當前的ServerCnxn對象和數據節點路徑傳入getData方法
  • ServerCnxn是一個Zookeeper客戶端和服務器之間的鏈接接口,代表了一個客戶端和服務器的鏈接,ServerCnxn接口默認實現是NIOServerCNxn,同時3.4.0版本開始引入了Netty實現:NettyServerCnxn,都實現了Watcher接口并且實現process接口,所有把他看成一個Watcher對象,如下ServerCnxn對象以及兩種process實現
public abstract class ServerCnxn implements Stats, Watcher { ......public abstract void process(WatchedEvent event);...... }

  • 繼續追getData源碼,getZkDataBase獲取到的ZKDatabase 對象,其中DataTree 對象是現在Zookeeper現有的節點數據的樹形存儲,我們可以通過path來從這獲取到對應節點信息,如下獲取DataNode,初始化節點狀態,將DataNode天驕到WatchManager 對象中的WatchTable和watch2Paths中
byte b[] = zks.getZKDatabase().getData(getDataRequest.getPath(), stat,getDataRequest.getWatch() ? cnxn : null); //如下getData實現 public byte[] getData(String path, Stat stat, Watcher watcher)throws KeeperException.NoNodeException {DataNode n = nodes.get(path);if (n == null) {throw new KeeperException.NoNodeException();}synchronized (n) {n.copyStat(stat);if (watcher != null) {dataWatches.addWatch(path, watcher);}return n.data;}}
  • Watchmanager是Zookeeper服務端Watcher的管理者,內部管理的WatcherTable和Watch2Paths,所以一個節點存儲了兩次,不過是從如下兩個未存存儲
    • watchTable是從數據節點路徑的粒度來托管Watcher
    • watch2Paths是從Watcher的粒度來空值時間觸發需要出發的數據節點。
*/ public class WatchManager {private static final Logger LOG = LoggerFactory.getLogger(WatchManager.class);private final HashMap<String, HashSet<Watcher>> watchTable =new HashMap<String, HashSet<Watcher>>();private final HashMap<Watcher, HashSet<String>> watch2Paths =new HashMap<Watcher, HashSet<String>>();......}
  • WatcherManager數據結構如下
WatcherManager
- watchTable: HashMap<String, HashSet>(); + watch2Paths :new HashMap<Watcher, HashSet>();
+ addwatch(String ,Watcher): void + removeWatcher(Watcher): void + triggerWatch(String, EventType):Set +Trigger

上一篇Zookeeper–ZAB與Paxos算法聯系與區別
下一篇Zookeeper–Watcher機制源碼剖析二

總結

以上是生活随笔為你收集整理的Zookeeper--Watcher机制源码剖析一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产午夜精品一区二区三区嫩草 | 日韩在线二区 | 久久久精品久久日韩一区综合 | 黄色毛片一级片 | 黄色免费在线视频 | 久久久久久久久免费 | 青草视频在线 | 蜜臀av免费一区二区三区 | 国产亚洲免费观看 | 日本最大色倩网站www | 欧美日韩电影在线播放 | 五月婷婷色| 高清av网站 | 国产精品美女久久久久aⅴ 干干夜夜 | av免费网站观看 | 亚洲精品国产成人av在线 | 亚洲专区 国产精品 | 中文字幕 国产视频 | 久久热亚洲 | 狠狠干网 | 色视频网页 | 亚洲精品在线免费观看视频 | 国产美女精品久久久 | 成人午夜电影在线 | 操天天操 | 成人在线视| 婷婷色视频 | 国产成人av电影 | 色橹橹欧美在线观看视频高清 | 国产日本高清 | 色婷婷啪啪免费在线电影观看 | 成人a级大片 | 伊人婷婷综合 | 在线观看视频免费播放 | 日韩免费视频在线观看 | 欧美a视频在线观看 | 97视频精品 | 亚洲www天堂com | 国产高清视频在线免费观看 | 日韩精品免费在线播放 | 六月激情婷婷 | 深爱开心激情网 | 99视频导航| 亚洲综合在线五月天 | 在线国产一区二区三区 | 国产成人av片 | 亚洲欧美日本一区二区三区 | 色成人亚洲 | 国产原创在线 | 中文字幕一区二区三区在线视频 | 中文字幕国产一区 | 婷婷六月天在线 | 在线观看国产永久免费视频 | 在线看一级片 | 亚洲欧洲精品视频 | 黄色91免费观看 | 91中文字幕在线视频 | av大片免费看 | 欧美韩国日本在线 | 日本99热| 在线播放你懂 | 精品国产伦一区二区三区 | 99热这里只有精品国产首页 | 亚洲干视频在线观看 | 99久久精品免费看国产四区 | 99视频精品 | 成年人黄色免费视频 | 国产在线观看91 | 狠狠色噜噜狠狠狠合久 | av片子在线观看 | 亚洲韩国一区二区三区 | 久草精品在线播放 | 亚洲成av人影片在线观看 | 国产美腿白丝袜足在线av | 五月婷久 | 国产裸体视频bbbbb | 久久久久夜色 | 日日摸日日 | 国产一级小视频 | 亚洲一级片在线观看 | 欧美一二三区播放 | 五月天婷婷在线播放 | 在线免费高清一区二区三区 | 黄色小说视频在线 | 91精品啪在线观看国产81旧版 | 免费裸体视频网 | 狠狠色伊人亚洲综合成人 | 成人禁用看黄a在线 | 久久精品中文字幕少妇 | 国产精品久久久久久久久久不蜜月 | 亚洲无吗av | 最新中文字幕视频 | 免费男女羞羞的视频网站中文字幕 | 国产精品va最新国产精品视频 | 日日日视频 | 中文字幕 国产精品 | 丝袜美腿亚洲综合 | 国产男女爽爽爽免费视频 | av免费在线看网站 | 黄色成人91 | 国产日本在线观看 | 在线看污网站 | 国产v在线观看 | 在线观看av国产 | 深夜免费网站 | 国产免费xvideos视频入口 | 视频精品一区二区三区 | 99久高清在线观看视频99精品热在线观看视频 | 最新av电影网站 | 久久免费的视频 | 激情久久婷婷 | 国偷自产视频一区二区久 | 久久91网| 国产人在线成免费视频 | av福利第一导航 | 婷婷丁香色 | 99久久精品国产系列 | 韩国一区在线 | 伊人久操| 日韩在线 一区二区 | 久久久久免费视频 | 麻豆视频免费网站 | 欧美国产日韩一区二区 | www在线观看视频 | 欧美精品久久久久久久久免 | 久久综合色影院 | 手机在线日韩视频 | 91 在线视频播放 | 成人国产亚洲 | 超碰97免费观看 | 免费毛片一区二区三区久久久 | 99精品系列 | 99精彩视频 | 日本激情中文字幕 | www.狠狠干| 美女国产网站 | 黄色特级毛片 | 99精品视频一区 | 国产精品久久久久久五月尺 | 9999国产精品 | 黄色大片免费网站 | 亚洲精品国久久99热 | 在线观看中文字幕dvd播放 | 少妇搡bbbb搡bbb搡69 | 国产美女免费 | 国产成人一区二区三区在线观看 | 97视频在线观看视频免费视频 | 久久久久中文 | 一区二区三区四区在线免费观看 | 日韩视频一区二区三区 | 色婷婷激情五月 | 亚洲天堂网在线观看视频 | 国产一级视频 | 久久久久久久久爱 | 在线亚洲高清视频 | 九九久久婷婷 | 精品久久久久久久久亚洲 | 亚洲精区二区三区四区麻豆 | 亚洲国产精久久久久久久 | 综合婷婷丁香 | 欧美一级日韩三级 | 日本中文字幕网址 | 日日干夜夜操视频 | 国产美女被啪进深处喷白浆视频 | 高清国产午夜精品久久久久久 | 九九九在线观看视频 | 99精品欧美一区二区三区 | 国产人成一区二区三区影院 | 久久草在线免费 | 亚洲免费成人 | 首页av在线 | 97看片| 久久黄色免费 | 免费在线激情电影 | 久久线视频 | 国产不卡在线视频 | 国产精品久久久久av福利动漫 | 二区三区精品 | 激情综合五月 | 狠狠色丁香九九婷婷综合五月 | 久久婷婷国产 | 天天干天天操天天搞 | 久久久久久毛片精品免费不卡 | 九九久久电影 | 国产一在线精品一区在线观看 | 亚洲综合最新在线 | 成年人视频在线免费 | 在线观看视频中文字幕 | 黄色免费网站大全 | 91尤物在线播放 | 久久综合婷婷国产二区高清 | 亚洲免费色 | 人人艹视频 | 九九免费视频 | 久久精品99国产国产 | 国产精品午夜在线 | 天天摸天天干天天操天天射 | 日日爽天天爽 | 91爱爱免费观看 | 2019天天干天天色 | 麻豆传媒视频观看 | 中文字幕一区二区三区四区在线视频 | 国产精品午夜久久 | 成人av高清在线观看 | 久久99国产一区二区三区 | 69av免费视频 | h动漫中文字幕 | 91视频链接 | 久99久中文字幕在线 | 欧美伦理一区二区 | 亚洲精品在线资源 | 国产男女无遮挡猛进猛出在线观看 | 精品欧美一区二区精品久久 | 人人擦 | 国产精品美女久久 | 亚洲精品在线二区 | www.狠狠色.com | 成人网页在线免费观看 | 色天天| 天天操天天射天天操 | 96精品视频 | 免费视频久久久久 | 香蕉视频在线免费 | 91自拍视频在线观看 | 国产中文字幕在线 | 国产不卡毛片 | 夜夜操天天摸 | av免费福利| 最新的av网站 | 97人人精品 | 免费一级毛毛片 | 中文字幕有码在线观看 | 欧美日韩在线视频一区 | 日本精品中文字幕 | 久久视频精品在线观看 | 亚洲高清在线 | 久草在线在线视频 | 免费三级av| 天天操夜夜叫 | 欧美一区二区三区免费看 | 日日摸日日添日日躁av | 911香蕉 | 色婷婷播放 | 91av在线免费视频 | 免费成人黄色片 | 久久不射影院 | 国产日韩精品久久 | www.久久精品视频 | 日韩精品一区二区免费视频 | 欧美性色xo影院 | 韩国在线一区 | 日日躁你夜夜躁你av蜜 | 国产一区二区三区黄 | 九九久久免费视频 | 天天操天天射天天插 | 激情久久综合网 | 欧美日韩国产精品一区二区亚洲 | 青青河边草手机免费 | 久久久视频在线 | 久草在线这里只有精品 | 黄色免费网站大全 | 激情一区二区三区欧美 | 免费www视频 | 欧美日韩一区二区久久 | 国产一级性生活视频 | 亚洲综合婷婷 | 久久99亚洲热视 | 91精品久久久久久久久久久久久 | 久久久久精 | 中文字幕在线一区观看 | 99热精品免费观看 | 欧美精品三级 | 免费av大全| 久久综合久久综合这里只有精品 | 天天爱天天操天天干 | wwwww.国产 | 午夜精品视频一区二区三区在线看 | 黄色网址av| www.日本色 | 精品一区二区三区电影 | 91视频免费看片 | 久久视频在线 | 美女视频一区二区 | 国内一区二区视频 | 在线观看免费福利 | 99精品影视 | 日日爱网址 | 久久精品爱爱视频 | 成全免费观看视频 | 永久黄网站色视频免费观看w | 人人干人人草 | 色美女在线 | 网址你懂的在线观看 | 亚洲国产精品成人女人久久 | 成人国产精品电影 | 成人性生交大片免费看中文网站 | 麻豆视频在线观看 | 999抗病毒口服液 | 免费福利视频网 | 九色精品在线 | 久久久精华网 | 久久视频免费观看 | 美州a亚洲一视本频v色道 | 日韩av手机在线看 | 999在线视频 | 97av影院| 婷婷黄色片 | 国产高清无线码2021 | 亚洲精品视频在线播放 | 亚洲在线黄色 | 丁香久久| 国内偷拍精品视频 | 天天骚夜夜操 | 日本中文一级片 | 91av在线国产 | 在线欧美中文字幕 | 国产精品福利视频 | 国产精品久久久久免费观看 | 精品国产伦一区二区三区观看方式 | av免费在线播放 | 伊人激情网 | 久久综合色天天久久综合图片 | 97精品国自产拍在线观看 | 国产一级在线 | 国产最新在线 | 五月天九九| 久久a视频| 久久亚洲欧美日韩精品专区 | 亚洲爱av | 久久超碰99| 亚洲第五色综合网 | 91久久精品一区二区二区 | 韩日电影在线观看 | 中文字幕第一页在线播放 | 亚洲人片在线观看 | 69欧美视频 | 三上悠亚一区二区在线观看 | 在线视频免费观看 | 精品在线观看一区二区 | 黄色网大全| 天天天天爽| 午夜视频在线观看欧美 | 粉嫩aⅴ一区二区三区 | 在线va视频| 东方av免费在线观看 | av解说在线观看 | 国产视频一区在线播放 | 中文字幕久久网 | 久久久免费精品视频 | 欧美看片| 黄色网在线免费观看 | 国产在线视频一区二区 | 九九九九精品九九九九 | 日韩精品一区二区三区在线视频 | 99热播精品 | 少妇搡bbbb搡bbb搡忠贞 | 综合网伊人| 日本久久免费电影 | 日韩性色 | 日韩在线视频线视频免费网站 | 久久99精品久久久久久 | 九九导航 | 四虎永久网站 | 精品国产一区二区三区四区vr | 丁香婷婷深情五月亚洲 | 成人aaa毛片 | 日本三级久久 | 久久国产精品99久久人人澡 | 婷婷婷国产在线视频 | 久热免费在线 | 天天操天天干天天综合网 | 香蕉在线影院 | 国产精品欧美一区二区 | 国产精品久久一区二区无卡 | 日韩剧情| 国产精品 国内视频 | 天天天综合网 | 国产三级午夜理伦三级 | 中文字幕精品在线 | 天天操天天玩 | 亚洲久草在线 | 午夜av免费观看 | 福利二区视频 | 国产精品成人一区二区三区吃奶 | 天天色成人网 | 色综合久久综合中文综合网 | 奇米影视在线99精品 | 国产精品地址 | 午夜免费久久看 | 色综合天天狠天天透天天伊人 | 99久久99久久免费精品蜜臀 | 国产精品原创av片国产免费 | 亚洲欧美国产日韩在线观看 | 国产麻豆精品久久一二三 | 亚洲一区二区三区91 | 色综合五月 | 亚洲有 在线 | 狠狠狠色丁香综合久久天下网 | 日韩欧美国产精品 | 狠狠干天天操 | 亚洲天天在线日亚洲洲精 | 中文字幕中文 | 久久久99精品免费观看乱色 | 五月天丁香 | 欧美色图亚洲图片 | 久久都是精品 | 久久中文字幕导航 | 九九一级片 | 久久人人97超碰精品888 | 免费福利视频网站 | 韩国av免费看 | 日韩av不卡在线播放 | 久久久久免费精品 | 国产男女无遮挡猛进猛出在线观看 | 欧美亚洲成人xxx | 婷婷色九月 | 色婷婷天天干 | 亚洲91精品在线观看 | 久久久久久久国产精品视频 | 日韩毛片在线播放 | 亚洲www天堂com | 97超视频在线观看 | 久久精品一区二区三区四区 | 久久久免费精品 | 国产高清福利在线 | 一区二区三区免费网站 | 久久精品这里都是精品 | 国产精品18久久久久久久网站 | 色综合天天狠天天透天天伊人 | 亚洲色五月 | 碰超人人| 91精品国产成 | 中文字幕中文字幕在线中文字幕三区 | 久草在线综合网 | 操操操影院 | 国产精品久久一卡二卡 | 亚洲人视频在线 | 一区二区三区手机在线观看 | 久久精品官网 | 超碰免费在线公开 | 99av国产精品欲麻豆 | 在线观看成人小视频 | 欧美一区二区三区激情视频 | 免费国产视频 | 97麻豆视频 | 免费色视频在线 | 亚洲精品视频在 | 日本天天操 | av最新资源 | av成人免费在线观看 | 激情小说网站亚洲综合网 | 麻豆国产精品va在线观看不卡 | 国产综合福利在线 | 国产亚洲精品久久 | 国产精品v欧美精品 | 狠狠狠综合 | 天天干天天操天天射 | 又黄又刺激视频 | 精品一区中文字幕 | 久久久久久久电影 | 国产精品毛片一区二区 | 国产精品不卡av | 欧美精选一区二区三区 | 天堂在线一区 | 超碰公开在线观看 | 亚洲码国产日韩欧美高潮在线播放 | 麻豆视频国产 | 久久国产视频网站 | 欧美a级免费视频 | 日韩高清无线码2023 | 性色av免费观看 | 五月天色丁香 | 免费在线观看av网站 | 99精品久久久久 | 日韩网站在线免费观看 | 不卡av免费在线观看 | 中文字幕在线专区 | 97超碰成人在线 | 日韩精品一区二区三区免费观看 | 中文字幕在线视频一区二区 | 狂野欧美激情性xxxx | 精品免费一区二区三区 | 久草在线电影网 | 日韩欧美国产激情在线播放 | 亚洲国产成人在线 | 日本精品视频在线播放 | 久久精品91久久久久久再现 | 四虎影视成人 | 精品视频一区在线 | 日韩欧美国产免费播放 | 九九精品久久 | 91大神精品视频在线观看 | 九九热视频在线免费观看 | 9999国产精品 | 国产中文字幕一区二区 | 久久综合五月天 | 亚洲欧洲一区二区在线观看 | 精品国产乱码久久久久久三级人 | 女人久久久久 | 欧美午夜寂寞影院 | 亚洲国产欧美在线人成大黄瓜 | 国产伦精品一区二区三区照片91 | 一区二区三区在线影院 | 九九久久视频 | 中文字幕国产精品一区二区 | 欧美精品少妇xxxxx喷水 | 国内精品在线看 | 日韩日韩日韩日韩 | 久久理论视频 | 91x色| 青青河边草免费直播 | 91av在线免费 | 国产在线传媒 | 亚洲精区二区三区四区麻豆 | 午夜精品一区二区三区在线观看 | 天堂网av 在线 | 最新一区二区三区 | 91在线看片 | 深夜国产在线 | 免费高清看电视网站 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 久久国产精品99久久久久久丝袜 | av网站免费线看精品 | 久草在线中文视频 | 成 人 a v天堂 | 久草精品视频 | 福利区在线观看 | 亚洲五月婷 | 午夜久久电影网 | 精品国产成人在线 | 四虎影视成人永久免费观看亚洲欧美 | 色中文字幕在线观看 | 97超碰在线久草超碰在线观看 | 久久伦理| 97在线观看免费高清完整版在线观看 | 亚洲成年人在线播放 | 天天干干 | 精品久久国产一区 | 国产午夜精品在线 | 亚洲激情在线观看 | 午夜美女福利直播 | 欧美性黄网官网 | 国产精品久久久久久久久蜜臀 | 夜夜骑日日 | 天天插天天操天天干 | 日日爽天天爽 | 麻豆视频免费观看 | 国产a级片免费观看 | 国产精品黑丝在线观看 | 国产日韩精品一区二区三区 | 日韩在线字幕 | 人人要人人澡人人爽人人dvd | 五月激情天 | 久久免费福利 | 欧美另类人妖 | 久久久久一区二区三区四区 | 欧美日韩高清不卡 | 欧美日韩免费在线观看视频 | 久一久久 | 天堂av在线 | 亚洲午夜小视频 | 久久99精品一区二区三区三区 | 久久超级碰 | 欧美一级片在线 | 成人午夜精品福利免费 | 久久人人97超碰精品888 | 国产高清免费av | 特黄特黄的视频 | 狠狠躁18三区二区一区ai明星 | 天堂网一区二区三区 | 人人澡人人添人人爽一区二区 | 毛片网在线播放 | 国产在线超碰 | 天堂va在线观看 | 日本中文字幕在线电影 | 久久久五月婷婷 | 日韩黄在线观看 | 一本一本久久a久久精品牛牛影视 | 国产精品美女久久久久久久久 | 国内视频在线观看 | 91精品国产自产老师啪 | 精品一区三区 | 久久免费国产精品 | 97人人视频 | 日韩美视频 | 91视频久久久久久 | 天天干夜夜 | 久草在线手机视频 | 欧美一级免费高清 | 欧美综合在线视频 | 久久99国产精品免费 | 国产99久久久欧美黑人 | 免费网站黄色 | 97在线观看免费视频 | 蜜臀一区二区三区精品免费视频 | 四虎小视频 | 91免费日韩 | 久久亚洲二区 | 66av99精品福利视频在线 | 婷婷www | 免费在线观看黄 | 欧美a级在线免费观看 | 国产精品一级视频 | 欧美伊人网 | 欧美日韩亚洲在线观看 | 在线成人看片 | 日韩久久精品一区二区三区下载 | 日韩免费播放 | 久久草草影视免费网 | 狠狠色狠狠色综合系列 | 久久伊人八月婷婷综合激情 | 欧美va日韩va | 国产精品男女 | 国产免费观看久久 | 国产黄色片免费 | 美女福利视频一区二区 | 丁香五月亚洲综合在线 | 欧美淫视频 | 极品久久久久 | 97av色| 成人国产网址 | 国产美女网站在线观看 | 97在线影视 | 欧美一区二区精美视频 | 久久久久亚洲精品 | 日韩在线三级 | 国产精品久久久久久久久蜜臀 | 午夜av片 | 91视频免费视频 | 日韩色视频在线观看 | 天天色天天操综合 | 国产亚洲va综合人人澡精品 | 亚洲一区免费在线 | 狠狠色狠狠色 | 婷婷精品视频 | www激情久久 | 精品国产综合区久久久久久 | 精品在线一区二区 | 少妇18xxxx性xxxx片 | 成人91av| 久久精品一区二区国产 | 国产在线精品视频 | 婷婷视频在线播放 | 区一区二区三区中文字幕 | 午夜精品福利一区二区三区蜜桃 | 久草久草在线观看 | 久久只精品99品免费久23小说 | 青青草在久久免费久久免费 | 在线观看视频97 | 中文字幕国产精品一区二区 | 97色在线观看免费视频 | 毛片网免费 | 在线视频91 | 日韩中文字幕免费在线观看 | 久久国产精品久久精品国产演员表 | 在线小视频国产 | 久久综合婷婷综合 | 亚洲女同videos | 一区二区三区免费在线观看视频 | 91福利视频在线 | av在线网站免费观看 | 在线免费观看涩涩 | 久草在线资源观看 | 四虎www | 国产精品一区二区在线观看免费 | 日韩精品久久久 | 国产成人一区二区三区电影 | 精品xxx| 日本精品久久久久 | 亚洲二区精品 | 天天射天天干天天操 | 日日摸日日爽 | 天天操狠狠操夜夜操 | 国产精品99久久久精品免费观看 | 亚洲一级影院 | 亚洲aaa级 | www.国产精品| 日韩免费网站 | 久久久久久久久久久久亚洲 | 美女网站在线播放 | 国产精品久免费的黄网站 | 国产精品久久三 | 久久影院午夜论 | 天天看天天干天天操 | 中文字幕av免费观看 | 99久热在线精品视频成人一区 | 91av视频免费观看 | 黄色在线小网站 | 手机av在线免费观看 | 日韩精品中文字幕有码 | 国产日产欧美在线观看 | 天海冀一区二区三区 | 国产精品毛片久久久久久久久久99999999 | 日韩精品视频免费专区在线播放 | www.久久精品视频 | 粉嫩av一区二区三区四区在线观看 | 免费视频在线观看网站 | 中文字幕日本在线观看 | 亚洲国产电影在线观看 | 在线观看免费国产小视频 | 天天操天天干天天干 | 视频在线99re | 成年人黄色av | 国产精品男女啪啪 | 国产一级二级三级在线观看 | 91九色视频在线播放 | 91成人小视频 | 黄色小说免费观看 | 国产精品专区h在线观看 | 成人a视频 | 久久精品99国产精品亚洲最刺激 | 91成人小视频 | 国产精品女人网站 | 国际av在线 | 就色干综合 | 在线观看中文字幕一区二区 | 精品国内自产拍在线观看视频 | 五月婷婷影视 | 日韩精品一区二区三区在线播放 | 国产96精品 | 日韩电影在线一区二区 | 六月丁香社区 | 久久乐九色婷婷综合色狠狠182 | 免费在线中文字幕 | 欧美一级电影免费观看 | 在线成人性视频 | 丝袜美女视频网站 | 免费一级日韩欧美性大片 | 精品国产精品久久 | 日韩在线精品 | 在线免费视频你懂的 | 99久久国产免费看 | 亚洲精品资源在线观看 | 久久亚洲视频 | 香蕉视频91 | 日产乱码一二三区别免费 | 久久蜜桃av| 97免费中文视频在线观看 | 久久99亚洲精品久久 | 91c网站色版视频 | 91av免费观看 | 国产在线a视频 | 久草久热 | 免费观看www小视频的软件 | 中文字幕在线观看1 | 久久男女视频 | 久久人人插 | 国产精品 亚洲精品 | 天天天天干 | 天天色天天操综合网 | 亚洲九九 | 一区二区三区视频网站 | 日韩免费中文字幕 | 亚洲尺码电影av久久 | 91人人网 | 少妇18xxxx性xxxx片 | 福利视频入口 | 久久精品亚洲一区二区三区观看模式 | 欧美精品久久久久久久 | 日本视频网| 国产精品综合久久久久久 | 日韩精品国产一区 | 在线 视频 亚洲 | 久久艹影院 | 日韩精品黄 | 中文在线字幕免费观看 | 亚洲成人在线免费 | 日韩 在线a | 久久狠狠干 | 久久高清片 | 中文国产成人精品久久一 | 最新日韩在线 | 亚洲精品小视频 | 国产成人精品av在线观 | 久久av观看| 国产99中文字幕 | 99久久久国产精品 | 依人成人综合网 | 久久久免费精品国产一区二区 | 久久精品直播 | 亚洲网久久 | 色av男人的天堂免费在线 | 国产99爱 | 久久久久激情电影 | 人人爽人人爽人人片 | 久久一区国产 | 久久免费视频这里只有精品 | 免费av视屏 | 操碰av | 免费亚洲视频在线观看 | 日日插日日干 | 久久这里只有精品视频首页 | 午夜免费电影院 | 在线视频黄 | 人人狠狠综合久久亚洲婷 | 日日日操操 | 色婷婷综合久久久久 | 久久久国产一区二区 | www黄色软件 | 日韩区视频 | 91麻豆国产福利在线观看 | av在线电影网站 | 成年人av在线播放 | 蜜臀精品久久久久久蜜臀 | 国产黄色片免费看 | 亚洲伦理一区二区 | 国产精品美女免费看 | 午夜视频免费播放 | 五月天婷婷狠狠 | 国产在线观看免费观看 | 麻豆视频www | 色在线国产 | 久久国产香蕉视频 | 国产精品高清在线观看 | 午夜黄色影院 | 国产成人在线精品 | 亚洲在线视频观看 | 国产精品成人av在线 | 日韩精品1区2区 | 日日夜夜精品免费视频 | 中文国产字幕在线观看 | 精品国产电影一区二区 | 亚洲精品国产精品国自产 | a天堂中文在线 | 天天干天天干天天色 | 97精品国产一二三产区 | 99爱精品在线 | 在线观看国产区 | 色婷婷国产精品一区在线观看 | 亚洲欧美视频在线观看 | 人人爽人人乐 | 在线观看日本韩国电影 | 精品99久久 | 国产精品99久久久久久人免费 | 国产一区国产二区在线观看 | 国产精品国产三级国产专区53 | 国产自产高清不卡 | 91av电影在线 | 久久综合久久综合这里只有精品 | 五月婷婷综 | 免费国产在线视频 | 亚洲成a人片77777kkkk1在线观看 | 国产区免费 | 日韩电影一区二区在线观看 | 丝袜+亚洲+另类+欧美+变态 | 99九九热只有国产精品 | 久久这里只有精品视频99 | 国产在线一卡 | 国产精品欧美久久久久无广告 | 日韩在线视频免费观看 | 中文字幕在线观看免费 | 久久论理 | 99久久精品一区二区成人 | 91黄色免费网站 | 啪啪免费视频网站 | 亚洲无人区小视频 | 伊人小视频 | 人人爽人人 | 国产在线观看黄 | 国产高清黄 | 亚洲欧美日韩在线看 | 日韩av中文在线观看 | av电影免费 | 在线韩国电影免费观影完整版 | www·22com天天操| 日日摸日日添日日躁av | 国产美女精品视频免费观看 | 日本中文字幕系列 | 人人爽人人做 | 久久黄色精品视频 | 日韩高清免费观看 | 免费看网站在线 | 久久精彩 | 狠狠干天天射 | 亚洲精品美女久久17c | 激情综合色图 | 久久婷婷亚洲 | av永久网址 | 五月综合色 | 天天操天天射天天操 | 欧美日韩精品在线免费观看 | 在线婷婷 | 婷婷 综合 色 | 精品一区二区久久久久久久网站 | 国产视频一区在线免费观看 | 9免费视频| 国产精品99精品 | 婷五月天激情 | 999免费视频 | 亚洲综合色激情五月 | 激情五月av | 国产亚洲精品日韩在线tv黄 | 国产91亚洲精品 | 中字幕视频在线永久在线观看免费 | 精品在线观看一区二区三区 | 亚洲精品在线播放视频 | 久久久久久久久毛片精品 | 91麻豆网 | 激情婷婷欧美 | 国产一区二区电影在线观看 | 91精品国产自产在线观看永久 | 一区二区三区四区五区六区 | 久久免费国产精品1 | 草久热 | 99久免费精品视频在线观看 | 欧美男男激情videos | 一区二区视频欧美 | 91精品一区二区三区蜜桃 | 国产成人精品福利 | 91黄色成人 | 91大神电影 | 日韩精品一区二区在线观看视频 | 91久久人澡人人添人人爽欧美 | 黄色av网站在线观看免费 | 久草观看视频 | 毛片1000部免费看 | 国产精品伦一区二区三区视频 | 亚洲三级av| 国际精品久久久 | 狠狠色丁香久久婷婷综合_中 | 国内精品久久久久久久久 | 国产黄色精品视频 | 欧美在线一级片 | 99人成在线观看视频 | 18久久久久| 欧美黄色软件 | 久久婷婷视频 | 日日婷婷夜日日天干 | 夜夜躁狠狠躁 | 欧美精品一区二区在线播放 | 欧美a影视| 国产美女视频免费观看的网站 | 在线亚洲日本 | 一区二区视频播放 | 91视频一8mav | 国产 欧美 日本 | 国产免费精彩视频 | 黄色小说视频在线 | 麻豆91在线看| 欧美精品免费在线观看 | 日本三级不卡视频 | 久久精品一区 | 久久精品亚洲综合专区 | 麻豆视屏 | 精品视频免费久久久看 | 日本mv大片欧洲mv大片 | 国产在线观看地址 | 国产精品视频资源 | 香蕉网在线播放 | 日本91在线 | 国产精品一区久久久久 | 丁香花在线视频观看免费 | 亚洲午夜精品一区二区三区电影院 | 国产男男gay做爰 | 国产精品国产亚洲精品看不卡 | 久久久高清一区二区三区 | 亚洲国产大片 | 在线高清 | 亚洲黄色在线播放 | 日韩在线观看网址 | 国产一区在线免费观看 | 婷婷视频在线 | 五月天精品视频 | 一区二区中文字幕在线播放 | 国产精品久久久久av | 免费久久99精品国产婷婷六月 | 在线免费观看涩涩 | 日韩和的一区二在线 | 欧美久久久久久久久中文字幕 | 狠狠色丁香久久婷婷综合五月 | 中文字幕亚洲精品日韩 | 日韩综合一区二区三区 | 国产一在线精品一区在线观看 | 日韩在线观看不卡 | 久久激情五月激情 | 视频在线国产 | www.久久久精品 | 国产高清免费视频 | 亚洲精品国产成人av在线 | 日韩网站一区二区 | 91在线免费看片 | 美女福利视频一区二区 | 国内精品久久久久影院一蜜桃 | 亚洲精品在线观看视频 | 国产精品毛片一区视频播 | 免费中文字幕 | 狠狠插狠狠干 | 婷婷激情五月 | 99久久精品无码一区二区毛片 | 在线观看一区 | 香蕉视频在线免费看 | 久久黄页 | 国产午夜麻豆影院在线观看 | 人人插人人舔 | 精品免费99久久 | 在线网站黄 | 九九热.com | 在线一二三四区 |