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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

zookeeper 源码阅读(1)

發(fā)布時(shí)間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zookeeper 源码阅读(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于源碼閱讀的幾點(diǎn)建議和方式:

1.盡量本地調(diào)試可以跑起來(lái)代碼

2.debug 日志梳理代碼執(zhí)行流程,這樣起到事半功倍的作用

3.干巴巴看代碼毫無(wú)意義,難度極大

?

zk 是分別有c語(yǔ)言編寫(xiě)的和java 編寫(xiě)的,zk 提供了豐富的api,一般公司中間件團(tuán)隊(duì),將zk api進(jìn)行包裝成jar包放到倉(cāng)庫(kù)供其他團(tuán)隊(duì)使用;同時(shí)封裝jar的時(shí)候,為了使用方便,增加了各種與spring 無(wú)縫組裝的方式。例如:在spring.xml中添加zk的配置或者消息隊(duì)列或線程等(其他中間件也是如此,如rsf, redis,kafka)。

zk c 源碼結(jié)構(gòu):

先看下 zk 中hashtable的代碼:

/* Copyright (C) 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */#include "hashtable.h" #include "hashtable_private.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h>/* Credit for primes table: Aaron Krownehttp://br.endernet.org/~akrowne/http://planetmath.org/encyclopedia/GoodHashTablePrimes.html */ static const unsigned int primes[] = { 53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317, 196613, 393241, 786433, 1572869, 3145739, 6291469, 12582917, 25165843, 50331653, 100663319, 201326611, 402653189, 805306457, 1610612741 }; const unsigned int prime_table_length = sizeof(primes)/sizeof(primes[0]); const float max_load_factor = 0.65;/*****************************************************************************/ struct hashtable * create_hashtable(unsigned int minsize,unsigned int (*hashf) (void*),int (*eqf) (void*,void*)) {struct hashtable *h;unsigned int pindex, size = primes[0];/* Check requested hashtable isn't too large */if (minsize > (1u << 30)) return NULL;/* Enforce size as prime */for (pindex=0; pindex < prime_table_length; pindex++) {if (primes[pindex] > minsize) { size = primes[pindex]; break; }}h = (struct hashtable *)malloc(sizeof(struct hashtable));if (NULL == h) return NULL; /*oom*/h->table = (struct entry **)malloc(sizeof(struct entry*) * size);if (NULL == h->table) { free(h); return NULL; } /*oom*/memset(h->table, 0, size * sizeof(struct entry *));h->tablelength = size;h->primeindex = pindex;h->entrycount = 0;h->hashfn = hashf;h->eqfn = eqf;h->loadlimit = (unsigned int) ceil(size * max_load_factor);return h; }/*****************************************************************************/ unsigned int hash(struct hashtable *h, void *k) {/* Aim to protect against poor hash functions by adding logic here* - logic taken from java 1.4 hashtable source */unsigned int i = h->hashfn(k);i += ~(i << 9);i ^= ((i >> 14) | (i << 18)); /* >>> */i += (i << 4);i ^= ((i >> 10) | (i << 22)); /* >>> */return i; }/*****************************************************************************/ static int hashtable_expand(struct hashtable *h) {/* Double the size of the table to accomodate more entries */struct entry **newtable;struct entry *e;struct entry **pE;unsigned int newsize, i, index;/* Check we're not hitting max capacity */if (h->primeindex == (prime_table_length - 1)) return 0;newsize = primes[++(h->primeindex)];newtable = (struct entry **)malloc(sizeof(struct entry*) * newsize);if (NULL != newtable){memset(newtable, 0, newsize * sizeof(struct entry *));/* This algorithm is not 'stable'. ie. it reverses the list* when it transfers entries between the tables */for (i = 0; i < h->tablelength; i++) {while (NULL != (e = h->table[i])) {h->table[i] = e->next;index = indexFor(newsize,e->h);e->next = newtable[index];newtable[index] = e;}}free(h->table);h->table = newtable;}/* Plan B: realloc instead */else {newtable = (struct entry **)realloc(h->table, newsize * sizeof(struct entry *));if (NULL == newtable) { (h->primeindex)--; return 0; }h->table = newtable;memset(newtable[h->tablelength], 0, newsize - h->tablelength);for (i = 0; i < h->tablelength; i++) {for (pE = &(newtable[i]), e = *pE; e != NULL; e = *pE) {index = indexFor(newsize,e->h);if (index == i){pE = &(e->next);}else{*pE = e->next;e->next = newtable[index];newtable[index] = e;}}}}h->tablelength = newsize;h->loadlimit = (unsigned int) ceil(newsize * max_load_factor);return -1; }/*****************************************************************************/ unsigned int hashtable_count(struct hashtable *h) {return h->entrycount; }/*****************************************************************************/ int hashtable_insert(struct hashtable *h, void *k, void *v) {/* This method allows duplicate keys - but they shouldn't be used */unsigned int index;struct entry *e;if (++(h->entrycount) > h->loadlimit){/* Ignore the return value. If expand fails, we should* still try cramming just this value into the existing table* -- we may not have memory for a larger table, but one more* element may be ok. Next time we insert, we'll try expanding again.*/hashtable_expand(h);}e = (struct entry *)malloc(sizeof(struct entry));if (NULL == e) { --(h->entrycount); return 0; } /*oom*/e->h = hash(h,k);index = indexFor(h->tablelength,e->h);e->k = k;e->v = v;e->next = h->table[index];h->table[index] = e;return -1; }/*****************************************************************************/ void * /* returns value associated with key */ hashtable_search(struct hashtable *h, void *k) {struct entry *e;unsigned int hashvalue, index;hashvalue = hash(h,k);index = indexFor(h->tablelength,hashvalue);e = h->table[index];while (NULL != e){/* Check hash value to short circuit heavier comparison */if ((hashvalue == e->h) && (h->eqfn(k, e->k))) return e->v;e = e->next;}return NULL; }/*****************************************************************************/ void * /* returns value associated with key */ hashtable_remove(struct hashtable *h, void *k) {/* TODO: consider compacting the table when the load factor drops enough,* or provide a 'compact' method. */struct entry *e;struct entry **pE;void *v;unsigned int hashvalue, index;hashvalue = hash(h,k);index = indexFor(h->tablelength,hash(h,k));pE = &(h->table[index]);e = *pE;while (NULL != e){/* Check hash value to short circuit heavier comparison */if ((hashvalue == e->h) && (h->eqfn(k, e->k))){*pE = e->next;h->entrycount--;v = e->v;freekey(e->k);free(e);return v;}pE = &(e->next);e = e->next;}return NULL; }/*****************************************************************************/ /* destroy */ void hashtable_destroy(struct hashtable *h, int free_values) {unsigned int i;struct entry *e, *f;struct entry **table = h->table;if (free_values){for (i = 0; i < h->tablelength; i++){e = table[i];while (NULL != e){ f = e; e = e->next; freekey(f->k); free(f->v); free(f); }}}else{for (i = 0; i < h->tablelength; i++){e = table[i];while (NULL != e){ f = e; e = e->next; freekey(f->k); free(f); }}}free(h->table);free(h); }/** Copyright (c) 2002, Christopher Clark* All rights reserved.* * Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:* * * Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.* * * Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.* * * Neither the name of the original author; nor the names of any contributors* may be used to endorse or promote products derived from this software* without specific prior written permission.* * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */

hashtable_itr 是對(duì)hashtable的操作

/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */#include "hashtable.h" #include "hashtable_private.h" #include "hashtable_itr.h" #include <stdlib.h> /* defines NULL *//*****************************************************************************/ /* hashtable_iterator - iterator constructor */struct hashtable_itr * hashtable_iterator(struct hashtable *h) {unsigned int i, tablelength;struct hashtable_itr *itr = (struct hashtable_itr *)malloc(sizeof(struct hashtable_itr));if (NULL == itr) return NULL;itr->h = h;itr->e = NULL;itr->parent = NULL;tablelength = h->tablelength;itr->index = tablelength;if (0 == h->entrycount) return itr;for (i = 0; i < tablelength; i++){if (NULL != h->table[i]){itr->e = h->table[i];itr->index = i;break;}}return itr; }/*****************************************************************************/ /* advance - advance the iterator to the next element* returns zero if advanced to end of table */int hashtable_iterator_advance(struct hashtable_itr *itr) {unsigned int j,tablelength;struct entry **table;struct entry *next;if (NULL == itr->e) return 0; /* stupidity check */next = itr->e->next;if (NULL != next){itr->parent = itr->e;itr->e = next;return -1;}tablelength = itr->h->tablelength;itr->parent = NULL;if (tablelength <= (j = ++(itr->index))){itr->e = NULL;return 0;}table = itr->h->table;while (NULL == (next = table[j])){if (++j >= tablelength){itr->index = tablelength;itr->e = NULL;return 0;}}itr->index = j;itr->e = next;return -1; }/*****************************************************************************/ /* remove - remove the entry at the current iterator position* and advance the iterator, if there is a successive* element.* If you want the value, read it before you remove:* beware memory leaks if you don't.* Returns zero if end of iteration. */int hashtable_iterator_remove(struct hashtable_itr *itr) {struct entry *remember_e, *remember_parent;int ret;/* Do the removal */if (NULL == (itr->parent)){/* element is head of a chain */itr->h->table[itr->index] = itr->e->next;} else {/* element is mid-chain */itr->parent->next = itr->e->next;}/* itr->e is now outside the hashtable */remember_e = itr->e;itr->h->entrycount--;freekey(remember_e->k);/* Advance the iterator, correcting the parent */remember_parent = itr->parent;ret = hashtable_iterator_advance(itr);if (itr->parent == remember_e) { itr->parent = remember_parent; }free(remember_e);return ret; }/*****************************************************************************/ int /* returns zero if not found */ hashtable_iterator_search(struct hashtable_itr *itr,struct hashtable *h, void *k) {struct entry *e, *parent;unsigned int hashvalue, index;hashvalue = hash(h,k);index = indexFor(h->tablelength,hashvalue);e = h->table[index];parent = NULL;while (NULL != e){/* Check hash value to short circuit heavier comparison */if ((hashvalue == e->h) && (h->eqfn(k, e->k))){itr->index = index;itr->e = e;itr->parent = parent;itr->h = h;return -1;}parent = e;e = e->next;}return 0; }/** Copyright (c) 2002, 2004, Christopher Clark* All rights reserved.* * Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:* * * Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.* * * Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.* * * Neither the name of the original author; nor the names of any contributors* may be used to endorse or promote products derived from this software* without specific prior written permission.* * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */

看下java 代碼,首先本地創(chuàng)建一個(gè)maven工程,將main 下面代碼放進(jìn)來(lái),然后將lib下面的jar 引入進(jìn)來(lái)。

代碼基本上可以運(yùn)行,但是部分有些小的爆粗,主要就是這塊代碼在繼承處理上的問(wèn)題,只要稍加改動(dòng)就可以了。@override去掉

運(yùn)行結(jié)果:

zk 主入口:

每一個(gè)zk 放到一臺(tái)機(jī)器 上都要執(zhí)行 這個(gè)main啟動(dòng)一個(gè)進(jìn)程:

public static void main(String args[])throws KeeperException, IOException, InterruptedException{ZooKeeperMain main = new ZooKeeperMain(args);main.run();} public ZooKeeperMain(String args[]) throws IOException, InterruptedException {cl.parseOptions(args);System.out.println("Connecting to " + cl.getOption("server"));connectToZK(cl.getOption("server"));//zk = new ZooKeeper(cl.getOption("server"), // Integer.parseInt(cl.getOption("timeout")), new MyWatcher());}

cl.getOption("server") 設(shè)置服務(wù)器參數(shù)

static class MyCommandOptions {private Map<String,String> options = new HashMap<String,String>();private List<String> cmdArgs = null;private String command = null;public static final Pattern ARGS_PATTERN = Pattern.compile("\\s*([^\"\']\\S*|\"[^\"]*\"|'[^']*')\\s*");public static final Pattern QUOTED_PATTERN = Pattern.compile("^([\'\"])(.*)(\\1)$");public MyCommandOptions() {options.put("server", "localhost:2181");options.put("timeout", "30000");}public String getOption(String opt) {return options.get(opt);}public String getCommand( ) {return command;}public String getCmdArgument( int index ) {return cmdArgs.get(index);}public int getNumArguments( ) {return cmdArgs.size();}public String[] getArgArray() {return cmdArgs.toArray(new String[0]);}/*** Parses a command line that may contain one or more flags* before an optional command string* @param args command line arguments* @return true if parsing succeeded, false otherwise.*/public boolean parseOptions(String[] args) {List<String> argList = Arrays.asList(args);Iterator<String> it = argList.iterator();while (it.hasNext()) {String opt = it.next();try {if (opt.equals("-server")) {options.put("server", it.next());} else if (opt.equals("-timeout")) {options.put("timeout", it.next());} else if (opt.equals("-r")) {options.put("readonly", "true");}} catch (NoSuchElementException e){System.err.println("Error: no argument found for option "+ opt);return false;}if (!opt.startsWith("-")) {command = opt;cmdArgs = new ArrayList<String>( );cmdArgs.add( command );while (it.hasNext()) {cmdArgs.add(it.next());}return true;}}return true;}/*** Breaks a string into command + arguments.* @param cmdstring string of form "cmd arg1 arg2..etc"* @return true if parsing succeeded.*/public boolean parseCommand( String cmdstring ) {Matcher matcher = ARGS_PATTERN.matcher(cmdstring);List<String> args = new LinkedList<String>();while (matcher.find()) {String value = matcher.group(1);if (QUOTED_PATTERN.matcher(value).matches()) {// Strip off the surrounding quotesvalue = value.substring(1, value.length() - 1);}args.add(value);}if (args.isEmpty()){return false;}command = args.get(0);cmdArgs = args;return true;}}

MyCommandOptions這個(gè)類(lèi)是ZookeeperMain中的子類(lèi)

接著執(zhí)行到方法:

protected void connectToZK(String newHost) throws InterruptedException, IOException {if (zk != null && zk.getState().isAlive()) {zk.close();}host = newHost;boolean readOnly = cl.getOption("readonly") != null;zk = new ZooKeeper(host,Integer.parseInt(cl.getOption("timeout")),new MyWatcher(), readOnly);}

接著調(diào)用ZooKeeper 創(chuàng)建一個(gè)線程服務(wù)

public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,boolean canBeReadOnly)throws IOException{LOG.info("Initiating client connection, connectString=" + connectString+ " sessionTimeout=" + sessionTimeout + " watcher=" + watcher);watchManager.defaultWatcher = watcher;ConnectStringParser connectStringParser = new ConnectStringParser(connectString);HostProvider hostProvider = new StaticHostProvider(connectStringParser.getServerAddresses());cnxn = new ClientCnxn(connectStringParser.getChrootPath(),hostProvider, sessionTimeout, this, watchManager,getClientCnxnSocket(), canBeReadOnly);cnxn.start();}

看下ClientCnxn 以及start

public ClientCnxn(String chrootPath, HostProvider hostProvider, int sessionTimeout, ZooKeeper zooKeeper,ClientWatchManager watcher, ClientCnxnSocket clientCnxnSocket,long sessionId, byte[] sessionPasswd, boolean canBeReadOnly) {this.zooKeeper = zooKeeper;this.watcher = watcher;this.sessionId = sessionId;this.sessionPasswd = sessionPasswd;this.sessionTimeout = sessionTimeout;this.hostProvider = hostProvider;this.chrootPath = chrootPath;connectTimeout = sessionTimeout / hostProvider.size();readTimeout = sessionTimeout * 2 / 3;readOnly = canBeReadOnly;sendThread = new SendThread(clientCnxnSocket);eventThread = new EventThread();} public void start() {sendThread.start();eventThread.start();} SendThread(ClientCnxnSocket clientCnxnSocket) {super(makeThreadName("-SendThread()"));state = States.CONNECTING;this.clientCnxnSocket = clientCnxnSocket;setDaemon(true);}

到這里可以看到zk 創(chuàng)建一個(gè)線程開(kāi)啟socket服務(wù),端口2181,監(jiān)聽(tīng)回過(guò)頭來(lái)看下main.run

void run() throws KeeperException, IOException, InterruptedException {if (cl.getCommand() == null) {System.out.println("Welcome to ZooKeeper!");boolean jlinemissing = false;// only use jline if it's in the classpathtry {Class consoleC = Class.forName("jline.ConsoleReader");Class completorC =Class.forName("org.apache.zookeeper.JLineZNodeCompletor");System.out.println("JLine support is enabled");Object console =consoleC.getConstructor().newInstance();Object completor =completorC.getConstructor(ZooKeeper.class).newInstance(zk);Method addCompletor = consoleC.getMethod("addCompletor",Class.forName("jline.Completor"));addCompletor.invoke(console, completor);String line;Method readLine = consoleC.getMethod("readLine", String.class);while ((line = (String)readLine.invoke(console, getPrompt())) != null) {executeLine(line);}} catch (ClassNotFoundException e) {LOG.debug("Unable to start jline", e);jlinemissing = true;} catch (NoSuchMethodException e) {LOG.debug("Unable to start jline", e);jlinemissing = true;} catch (InvocationTargetException e) {LOG.debug("Unable to start jline", e);jlinemissing = true;} catch (IllegalAccessException e) {LOG.debug("Unable to start jline", e);jlinemissing = true;} catch (InstantiationException e) {LOG.debug("Unable to start jline", e);jlinemissing = true;}if (jlinemissing) {System.out.println("JLine support is disabled");BufferedReader br =new BufferedReader(new InputStreamReader(System.in));String line;while ((line = br.readLine()) != null) {executeLine(line);}}} else {// Command line args non-null. Run what was passed.processCmd(cl);}} protected boolean processCmd(MyCommandOptions co)throws KeeperException, IOException, InterruptedException{try {return processZKCmd(co);} catch (IllegalArgumentException e) {System.err.println("Command failed: " + e);} catch (KeeperException.NoNodeException e) {System.err.println("Node does not exist: " + e.getPath());} catch (KeeperException.NoChildrenForEphemeralsException e) {System.err.println("Ephemerals cannot have children: "+ e.getPath());} catch (KeeperException.NodeExistsException e) {System.err.println("Node already exists: " + e.getPath());} catch (KeeperException.NotEmptyException e) {System.err.println("Node not empty: " + e.getPath());} catch (KeeperException.NotReadOnlyException e) {System.err.println("Not a read-only call: " + e.getPath());}catch (KeeperException.InvalidACLException e) {System.err.println("Acl is not valid : "+e.getPath());}catch (KeeperException.NoAuthException e) {System.err.println("Authentication is not valid : "+e.getPath());}catch (KeeperException.BadArgumentsException e) {System.err.println("Arguments are not valid : "+e.getPath());}catch (KeeperException.BadVersionException e) {System.err.println("version No is not valid : "+e.getPath());}return false;}

這塊代碼借助Jline 讀取配置文件中的command

public void executeLine(String line)throws InterruptedException, IOException, KeeperException {if (!line.equals("")) {cl.parseCommand(line);addToHistory(commandCount,line);processCmd(cl);commandCount++;}}

把指令添加到一個(gè)容器中--map,然后進(jìn)行分場(chǎng)景處理

protected boolean processZKCmd(MyCommandOptions co)throws KeeperException, IOException, InterruptedException{Stat stat = new Stat();String[] args = co.getArgArray();String cmd = co.getCommand();if (args.length < 1) {usage();return false;}if (!commandMap.containsKey(cmd)) {usage();return false;}boolean watch = args.length > 2;String path = null;List<ACL> acl = Ids.OPEN_ACL_UNSAFE;LOG.debug("Processing " + cmd);if (cmd.equals("quit")) {System.out.println("Quitting...");zk.close();System.exit(0);} else if (cmd.equals("redo") && args.length >= 2) {Integer i = Integer.decode(args[1]);if (commandCount <= i || i < 0){ // don't allow redoing this redoSystem.out.println("Command index out of range");return false;}cl.parseCommand(history.get(i));if (cl.getCommand().equals( "redo" )){System.out.println("No redoing redos");return false;}history.put(commandCount, history.get(i));processCmd( cl);} else if (cmd.equals("history")) {for (int i=commandCount - 10;i<=commandCount;++i) {if (i < 0) continue;System.out.println(i + " - " + history.get(i));}} else if (cmd.equals("printwatches")) {if (args.length == 1) {System.out.println("printwatches is " + (printWatches ? "on" : "off"));} else {printWatches = args[1].equals("on");}} else if (cmd.equals("connect")) {if (args.length >=2) {connectToZK(args[1]);} else {connectToZK(host); }} // Below commands all need a live connectionif (zk == null || !zk.getState().isAlive()) {System.out.println("Not connected");return false;}if (cmd.equals("create") && args.length >= 3) {int first = 0;CreateMode flags = CreateMode.PERSISTENT;if ((args[1].equals("-e") && args[2].equals("-s"))|| (args[1]).equals("-s") && (args[2].equals("-e"))) {first+=2;flags = CreateMode.EPHEMERAL_SEQUENTIAL;} else if (args[1].equals("-e")) {first++;flags = CreateMode.EPHEMERAL;} else if (args[1].equals("-s")) {first++;flags = CreateMode.PERSISTENT_SEQUENTIAL;}if (args.length == first + 4) {acl = parseACLs(args[first+3]);}path = args[first + 1];String newPath = zk.create(path, args[first+2].getBytes(), acl,flags);System.err.println("Created " + newPath);} else if (cmd.equals("delete") && args.length >= 2) {path = args[1];zk.delete(path, watch ? Integer.parseInt(args[2]) : -1);} else if (cmd.equals("rmr") && args.length >= 2) {path = args[1];ZKUtil.deleteRecursive(zk, path);} else if (cmd.equals("set") && args.length >= 3) {path = args[1];stat = zk.setData(path, args[2].getBytes(),args.length > 3 ? Integer.parseInt(args[3]) : -1);printStat(stat);} else if (cmd.equals("aget") && args.length >= 2) {path = args[1];zk.getData(path, watch, dataCallback, path);} else if (cmd.equals("get") && args.length >= 2) {path = args[1];byte data[] = zk.getData(path, watch, stat);data = (data == null)? "null".getBytes() : data;System.out.println(new String(data));printStat(stat);} else if (cmd.equals("ls") && args.length >= 2) {path = args[1];List<String> children = zk.getChildren(path, watch);System.out.println(children);} else if (cmd.equals("ls2") && args.length >= 2) {path = args[1];List<String> children = zk.getChildren(path, watch, stat);System.out.println(children);printStat(stat);} else if (cmd.equals("getAcl") && args.length >= 2) {path = args[1];acl = zk.getACL(path, stat);for (ACL a : acl) {System.out.println(a.getId() + ": "+ getPermString(a.getPerms()));}} else if (cmd.equals("setAcl") && args.length >= 3) {path = args[1];stat = zk.setACL(path, parseACLs(args[2]),args.length > 4 ? Integer.parseInt(args[3]) : -1);printStat(stat);} else if (cmd.equals("stat") && args.length >= 2) {path = args[1];stat = zk.exists(path, watch);if (stat == null) {throw new KeeperException.NoNodeException(path); }printStat(stat);} else if (cmd.equals("listquota") && args.length >= 2) {path = args[1];String absolutePath = Quotas.quotaZookeeper + path + "/" + Quotas.limitNode;byte[] data = null;try {System.err.println("absolute path is " + absolutePath);data = zk.getData(absolutePath, false, stat);StatsTrack st = new StatsTrack(new String(data));System.out.println("Output quota for " + path + " "+ st.toString());data = zk.getData(Quotas.quotaZookeeper + path + "/" +Quotas.statNode, false, stat);System.out.println("Output stat for " + path + " " +new StatsTrack(new String(data)).toString());} catch(KeeperException.NoNodeException ne) {System.err.println("quota for " + path + " does not exist.");}} else if (cmd.equals("setquota") && args.length >= 4) {String option = args[1];String val = args[2];path = args[3];System.err.println("Comment: the parts are " +"option " + option +" val " + val +" path " + path);if ("-b".equals(option)) {// we are setting the bytes quotacreateQuota(zk, path, Long.parseLong(val), -1);} else if ("-n".equals(option)) {// we are setting the num quotacreateQuota(zk, path, -1L, Integer.parseInt(val));} else {usage();}} else if (cmd.equals("delquota") && args.length >= 2) {//if neither option -n or -b is specified, we delete// the quota node for thsi node.if (args.length == 3) {//this time we have an optionString option = args[1];path = args[2];if ("-b".equals(option)) {delQuota(zk, path, true, false);} else if ("-n".equals(option)) {delQuota(zk, path, false, true);}} else if (args.length == 2) {path = args[1];// we dont have an option specified.// just delete whole quota nodedelQuota(zk, path, true, true);} else if (cmd.equals("help")) {usage();}} else if (cmd.equals("close")) {zk.close(); } else if (cmd.equals("sync") && args.length >= 2) {path = args[1];zk.sync(path, new AsyncCallback.VoidCallback() { public void processResult(int rc, String path, Object ctx) { System.out.println("Sync returned " + rc); } }, null );} else if (cmd.equals("addauth") && args.length >=2 ) {byte[] b = null;if (args.length >= 3)b = args[2].getBytes();zk.addAuthInfo(args[1], b);} else if (!commandMap.containsKey(cmd)) {usage();}return watch;}

?

?

總結(jié)

以上是生活随笔為你收集整理的zookeeper 源码阅读(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

久久艹人人 | 久久久91精品国产一区二区精品 | 久久久视频在线 | 国产美女精彩久久 | 国产不卡一 | 99精品国产福利在线观看免费 | 青青久视频| 五月婷丁香网 | 不卡av在线免费观看 | 色在线免费观看 | 国产精品一区二区三区久久 | 99看视频在线观看 | 色噜噜在线观看视频 | 久久久久久久久久久成人 | 国产探花在线看 | 最近中文字幕高清字幕免费mv | 国内成人精品视频 | 精品久久网 | 97超碰人人澡 | 四虎影视8848aamm | 欧美成人按摩 | 在线观看中文字幕视频 | 青春草免费视频 | 免费在线观看午夜视频 | 久久天天躁夜夜躁狠狠躁2022 | 午夜成人免费电影 | 毛片一二区 | 99国产在线视频 | 免费日韩 精品中文字幕视频在线 | 婷婷丁香社区 | 欧美在线aaa | 中文av日韩 | 美女视频黄是免费的 | 国产福利一区二区三区在线观看 | 美女亚洲精品 | 在线成人免费av | 久草在线视频首页 | 色妞久久福利网 | www黄色av | 黄色一级免费网站 | 丁香综合网 | 国产99色| 人人干干人人 | 日韩精品网址 | 成人毛片网 | 97免费| 精品91在线 | 天天射天天添 | 在线99 | 综合中文字幕 | 久久你懂的 | www.亚洲激情.com | 国产精品欧美激情在线观看 | 国产精品免费久久久久久久久久中文 | 免费合欢视频成人app | 热久久99这里有精品 | 日本不卡123区 | 在线观看一区 | 久久精品79国产精品 | 欧美电影在线观看 | 水蜜桃亚洲一二三四在线 | 天天插一插 | 天堂av观看 | 美女黄视频免费 | 久久高清片 | 91女人18片女毛片60分钟 | 911国产精品| 久草精品资源 | 99久久婷婷国产精品综合 | 天堂av观看 | 啪啪免费观看网站 | 91精品久久久久久久久久入口 | 久久国产a | av色综合网 | 国产精品999久久久 久产久精国产品 | 最新国产精品亚洲 | 精品国产一区二区在线 | 欧美精品久久久久久久免费 | av在线播放国产 | 中文字幕之中文字幕 | 97在线视频免费播放 | 少妇av网 | 欧美在线观看视频一区二区三区 | 91日韩在线播放 | 久久久久这里只有精品 | www.91av在线| 亚洲永久精品在线观看 | 久久久久蜜桃 | 免费在线观看一区 | 99热999| 国产一级小视频 | 99re热精品视频 | 久久精品国产久精国产 | 在线观看国产福利片 | 操综合 | 国产裸体永久免费视频网站 | 最新成人在线 | 欧美一区二区三区四区夜夜大片 | a色视频| 婷婷综合成人 | 久久久久久久久久久久久国产精品 | 亚洲国产免费看 | 人人射人人爽 | 91精品国产91久久久久福利 | 在线一二三四区 | 91免费高清 | 一区二区三区电影 | 国产精品美女久久久久久2018 | 日本xxxx裸体xxxx17 | www.色就是色 | 最新日本中文字幕 | 亚洲成av人片在线观看无 | 国产精品久久久久久久久久久久 | 成年人视频免费在线播放 | www.xxxx变态.com| 亚洲春色奇米影视 | 黄网站污| 一区二区三区日韩视频在线观看 | 91秒拍国产福利一区 | 久久男人中文字幕资源站 | 久久久久国产一区二区三区 | 成人精品久久 | 成人精品99 | 亚洲综合射 | 国产69精品久久久久久 | 日韩精品免费一区二区三区 | 天堂资源在线观看视频 | 成人黄色小说在线观看 | 91亚洲精品久久久久图片蜜桃 | 97超碰国产精品女人人人爽 | 亚洲欧洲精品久久 | 久久亚洲综合国产精品99麻豆的功能介绍 | 极品美女被弄高潮视频网站 | 国产乱码精品一区二区三区介绍 | 成人av动漫在线 | 日韩中文在线视频 | 91精品成人 | 99在线免费观看视频 | 夜夜爽88888免费视频4848 | 国产成人精品久久久 | 一区二区三区电影在线播 | 国产精品一区二区麻豆 | 久久综合桃花 | 偷拍久久久 | 超碰在线cao | 国产日韩中文在线 | 国产精品久久婷婷六月丁香 | 97超碰影视 | 日韩专区在线播放 | 九九在线精品视频 | 亚洲一二视频 | 日韩激情久久 | 欧美有色 | 在线日韩中文 | 美女网站免费福利视频 | 欧美午夜精品久久久久 | 久久久国产精品视频 | 香蕉在线影院 | 黄色小说免费观看 | 国产精品久久久久aaaa九色 | 免费成人在线网站 | 精品一区电影国产 | 亚洲高清视频一区二区三区 | 99久久精品电影 | 国产精品久久在线观看 | 久久伦理电影 | 99国产一区| 久久99久久99精品中文字幕 | 精品国产_亚洲人成在线 | 综合久久久久久久久 | 精品久久久久久电影 | 久久精品国产一区二区电影 | 极品中文字幕 | 国内久久精品 | 深夜福利视频在线观看 | 午夜久久美女 | 成+人+色综合 | 在线黄av| 成人高清在线 | 黄色免费观看网址 | 亚洲精品视频免费在线 | 久久视频精品 | 日本超碰在线 | 国产精品高 | 91丨九色丨蝌蚪丨对白 | 中文字幕av在线免费 | 亚洲情影院 | 91桃色国产在线播放 | 91久久久国产精品 | 国产最新视频在线 | 在线免费观看国产视频 | 国产精品久久久久aaaa | 国产高清视频免费观看 | 日韩理论电影在线 | 国产91影视 | 91视频在线自拍 | 亚洲三级黄色 | 国产玖玖在线 | 国产一级片在线播放 | 播五月综合| 国产一线二线三线在线观看 | 免费在线观看成人小视频 | 麻豆国产精品视频 | 99色在线观看视频 | 伊人影院在线观看 | 国产精品免费在线视频 | 日韩av中文在线观看 | 亚洲一区日韩精品 | 日韩视频一区二区在线 | www.天天色.com | 天天操天天射天天添 | 国产成人精品一区二三区 | 69精品视频 | 精品久久久久久国产偷窥 | 免费a视频在线观看 | 在线电影日韩 | 日韩精品播放 | 黄色影院在线免费观看 | 国产系列精品av | 肉色欧美久久久久久久免费看 | 日本九九视频 | 国产成人久久精品亚洲 | 久久精品91久久久久久再现 | 日韩高清免费无专码区 | 精品特级毛片 | 97香蕉超级碰碰久久免费软件 | 久草免费在线观看 | 天天操狠狠操夜夜操 | 51久久成人国产精品麻豆 | 99电影| 国产午夜一区二区 | 国产夫妻自拍av | 亚洲撸撸| 色噜噜狠狠色综合中国 | 欧产日产国产69 | 日韩在线观看网站 | 激情五月亚洲 | 美腿丝袜av | 在线视频a | 最近日本韩国中文字幕 | 麻豆国产精品永久免费视频 | 久久精品一区二区三区中文字幕 | 欧美999| 欧美成人久久 | www.久久久精品 | 国产中文在线视频 | 色综合久久久久久久久五月 | 亚洲天堂社区 | 中文字幕乱码在线播放 | 97超碰人人模人人人爽人人爱 | www好男人| 久久久久久久毛片 | 91网在线| 久久久www成人免费毛片麻豆 | 射九九 | 亚洲天堂毛片 | 免费看国产精品 | 亚洲精品天天 | 香蕉视频在线免费看 | 国产在线999| 久久人人爽视频 | 国产手机视频在线播放 | 黄色综合| 亚洲a成人v | 亚洲欧洲精品在线 | 97精产国品一二三产区在线 | 999视频网 | 玖玖在线免费视频 | 在线观看www. | 9幺看片| 西西444www高清大胆 | 日日摸日日碰 | 黄色免费网 | 91成人免费在线视频 | 免费看一级黄色大全 | 日韩视频免费 | 久久久久久久久久电影 | 亚洲影音先锋 | av五月婷婷 | 国产精品久久久久aaaa九色 | www.亚洲| 成人黄大片视频在线观看 | 成人永久在线 | 91一区啪爱嗯打偷拍欧美 | 久久免费成人精品视频 | 91九色网址| 嫩草91影院 | 国产色视频一区二区三区qq号 | 在线视频18在线视频4k | 黄色成人免费电影 | 成人综合免费 | a黄色片 | 国产精品自在线拍国产 | 99综合影院在线 | 色偷偷中文字幕 | 福利电影久久 | 狠狠色狠狠色综合日日小说 | 黄色影院在线免费观看 | 久久激情五月婷婷 | 91最新地址永久入口 | 激情久久伊人 | 国产亚洲资源 | 中文字幕一区二区三区在线视频 | 九九九九精品九九九九 | 99中文字幕在线观看 | 日韩高清免费在线观看 | av大全免费在线观看 | 九九九视频在线 | 欧美日韩高清免费 | 韩国精品视频在线观看 | 日韩免费在线播放 | 日韩欧美xxx| 国产黄色特级片 | 精品国产乱码一区二 | 日韩精品一区二区三区免费观看视频 | 免费在线观看亚洲视频 | 成年人国产在线观看 | 欧美激情综合五月色丁香 | 国产成人av在线影院 | 国产一区二区精品 | 伊人国产在线播放 | av电影不卡在线 | 中文字幕高清免费日韩视频在线 | 91视频久久久 | 久久伊人五月天 | 最近中文字幕高清字幕免费mv | 亚洲伊人天堂 | 国产伦精品一区二区三区… | 亚洲国产精品成人女人久久 | 在线黄色国产电影 | 在线看片中文字幕 | 色婷婷www | 韩国在线一区二区 | 麻豆免费在线视频 | 久久神马影院 | 在线观看免费高清视频大全追剧 | 亚洲伦理一区二区 | 视频一区二区三区视频 | 亚洲黄色app | 精品久久久999 | 五月天激情开心 | 国产午夜精品av一区二区 | 久久精品9 | 日韩欧美在线第一页 | 黄色片免费电影 | 91成人精品一区在线播放69 | 91av免费观看 | 久热免费 | 福利一区二区在线 | 亚洲国产一二三 | 国产一区二区精品久久91 | 欧美激情综合五月色丁香 | 五月婷在线播放 | 久久免费av电影 | 精品国产免费看 | 91在线porny国产在线看 | 亚洲一级二级 | 天天插天天爽 | 91视频国产高清 | 国产一级在线观看视频 | 国产精品久久久久一区二区 | 六月激情网 | 中文字幕成人av | av中文字幕在线看 | 天天操天天谢 | 亚欧日韩av | 日本久久久久久久久久 | 最近乱久中文字幕 | 日韩一片| 曰本免费av| 在线播放日韩av | 黄色成人av在线 | 中文字幕文字幕一区二区 | 日本在线观看一区 | 福利一区二区三区四区 | 天天爱综合 | 91香蕉视频在线下载 | 99视频在线播放 | 亚洲人天堂 | 国产午夜一区二区 | 国产三级精品三级在线观看 | 日韩中文在线视频 | 久久99精品久久久久蜜臀 | 国产成人精品一区二区三区在线 | 丁香激情婷婷 | 91看片看淫黄大片 | 99精品国产99久久久久久福利 | 狠狠狠综合| 啪啪资源 | 激情五月色播五月 | 亚洲视屏一区 | 久久电影国产免费久久电影 | 黄色精品网站 | 激情久久久久久久久久久久久久久久 | 操操操干干干 | 91九色porny蝌蚪主页 | 国产女教师精品久久av | 国产又粗又猛又色又黄网站 | 日韩深夜在线观看 | 亚洲婷婷在线 | 久久免费片 | 日本成址在线观看 | 狠狠的干狠狠的操 | 免费在线观看a v | av大全免费在线观看 | 91福利视频免费观看 | 欧美日韩电影在线播放 | 日韩一区二区三区高清免费看看 | 日本动漫做毛片一区二区 | 国内精品久久久久久久 | 天天色天天草天天射 | 美女久久久久久久久久久 | 日本久久不卡视频 | 91人人在线 | 麻豆小视频在线观看 | 免费成人看片 | 密桃av在线| 日韩精品久久久久久久电影99爱 | 日韩有码中文字幕在线 | 999久久久久久久久 69av视频在线观看 | 成人国产精品久久久 | av福利网址导航 | 免费一区在线 | 日韩精品一区二区三区外面 | av免费在线观看1 | 99综合电影在线视频 | 成人三级网站在线观看 | 亚洲一二三区精品 | 久久字幕精品一区 | 亚洲专区在线视频 | 91精品在线免费观看 | 欧美影片| 免费视频 三区 | 日韩精品一区二区免费 | 久草在线视频首页 | 高清一区二区三区av | 91免费看黄色 | 欧美激情第八页 | 九色视频网址 | 日本九九视频 | 久久久综合精品 | 天天干,夜夜爽 | 99精品视频免费在线观看 | 在线视频 区 | 人人爽人人av | 精品国产伦一区二区三区观看说明 | 天天操天天射天天插 | 欧美日韩高清在线 | 免费的国产精品 | 欧美国产不卡 | 在线精品视频免费播放 | 99色免费视频 | 国产资源精品在线观看 | 99久久精品久久亚洲精品 | 久久成人高清 | 欧美日韩在线播放 | 超黄视频网站 | 成人一级在线观看 | 91在线视频免费播放 | 奇米影视在线99精品 | 国产麻豆视频在线观看 | 天天曰天天爽 | 91热爆在线观看 | 精品免费观看视频 | 四虎在线观看精品视频 | 国产一区二区精 | 精品免费久久久久 | 欧美日韩国产精品一区二区 | 精品国产乱码久久久久久三级人 | 免费在线电影网址大全 | 亚洲美女精品 | 高清国产一区 | 国产精品乱码久久久久 | 国产精品扒开做爽爽的视频 | 9999免费视频 | 久热久草 | 一区 二区电影免费在线观看 | 日韩高清片 | 国产精品网址在线观看 | 国产高清av免费在线观看 | 中文字幕中文字幕在线中文字幕三区 | 天天看天天干 | av片在线观看免费 | 毛片永久免费 | 国产精品久久免费看 | 日韩精品高清不卡 | 五月婷婷一级片 | 在线免费观看国产视频 | 伊人开心激情 | 日韩精品久久一区二区 | 99在线视频免费观看 | 成年人视频在线免费播放 | 激情网色 | 欧美淫aaa免费观看 日韩激情免费视频 | 黄色三级网站在线观看 | a级片网站 | 亚洲精品久久久久久久蜜桃 | 久久精品99国产国产 | 精品国产一区二区三区不卡 | 精品黄色片 | 波多野结衣在线视频一区 | 欧美日韩性视频在线 | 在线免费视频你懂的 | 亚洲国产美女久久久久 | 欧美淫视频 | 国产视频导航 | 免费亚洲婷婷 | 丁香六月婷婷综合 | 综合久久五月天 | 91精品国产乱码 | 精品国产一区二区久久 | 国产又粗又硬又爽的视频 | 久久99九九99精品 | 国产亚洲精品久久久久久电影 | 少妇按摩av | 国产美女免费 | 在线国产不卡 | 亚洲激情在线观看 | 天天射天| 五月激情站 | 奇米影视777四色米奇影院 | 日日夜夜狠狠操 | 手机av电影在线 | 九九免费在线观看视频 | 精品亚洲免费 | 伊人资源站 | 亚洲三级性片 | 亚洲国产精品成人女人久久 | 久久手机视频 | 久久综合久久伊人 | 九色精品免费永久在线 | 亚洲欧美日韩在线一区二区 | 91视频91色| 欧美日韩在线视频免费 | 日韩欧美一区二区在线观看 | 亚洲第一av在线播放 | 国产精品美女久久久久久久 | 天天插日日插 | 精品国内自产拍在线观看视频 | 中文字幕首页 | 国产九九热视频 | 久久免费一级片 | 久久久午夜精品福利内容 | www五月天 | 狠狠色丁香婷婷综合视频 | 日日夜夜精品网站 | 你操综合 | 免费高清在线一区 | 国产又粗又猛又色又黄视频 | 人人天天夜夜 | 99精品国产一区二区三区麻豆 | 日日爽| 99久久999久久久精玫瑰 | 91天堂在线观看 | 91精品1区 | 337p日本大胆噜噜噜噜 | 国产理论免费 | 狠狠色伊人亚洲综合成人 | 亚洲资源一区 | 在线观看久 | 成人h视频在线播放 | 在线免费观看视频一区二区三区 | 日韩| a级国产乱理伦片在线播放 久久久久国产精品一区 | 亚洲精品一区中文字幕乱码 | 中文字幕三区 | 久久神马影院 | 偷拍精偷拍精品欧洲亚洲网站 | 亚洲欧美一区二区三区孕妇写真 | 免费a级毛片在线看 | 成人黄大片 | 欧美综合久久 | 欧美先锋影音 | 97免费视频在线 | 久久精品在线免费观看 | 国产精品亚洲视频 | 国产亚洲精品成人av久久影院 | 黄色成人在线观看 | 在线观看一级片 | 精品国产伦一区二区三区观看说明 | 亚洲视频 在线观看 | 精品一区二区视频 | 久久久久久久久久久电影 | 91精品国自产在线偷拍蜜桃 | www.久艹| 五月婷婷.com | 天天撸夜夜操 | www.xxx.性狂虐 | 国产91学生粉嫩喷水 | 欧美日韩高清一区二区 国产亚洲免费看 | 国语久久 | 99国产精品一区二区 | 伊人中文在线 | 97超碰人人 | 日韩高清三区 | 日韩在线精品一区 | 亚洲欧美成人综合 | 黄色片视频免费 | 高清在线一区 | 国产欧美日韩一区 | 成人黄色电影免费观看 | 天天插狠狠干 | 国产裸体永久免费视频网站 | 激情 婷婷 | 国产尤物在线视频 | 亚洲aⅴ乱码精品成人区 | 在线亚洲高清视频 | 天天天天综合 | 欧美一性一交一乱 | 在线免费视 | 91九色porn在线资源 | 成年人免费观看国产 | 久久久国产精品人人片99精片欧美一 | 精品视频久久久久久 | 婷五月天激情 | 亚洲精品大全 | 色综合久久久久网 | 在线天堂视频 | 91看片在线 | 成全在线视频免费观看 | free. 性欧美.com | 国产无吗一区二区三区在线欢 | 狠狠综合网 | 国产精品美女久久久久久久久久久 | 亚洲成a人片77777kkkk1在线观看 | 婷婷丁香在线视频 | 五月天久久婷 | 69视频国产 | 日韩黄色在线 | 韩国在线视频一区 | 日韩免费观看高清 | 久久爱992xxoo | 色综合久久网 | 久久久久久电影 | 国产一区观看 | 91精品国产麻豆 | 狠日日 | 久久,天天综合 | 麻豆视频在线免费 | 丝袜网站在线观看 | 超碰在线国产 | 91亚色在线观看 | 99免费在线播放99久久免费 | 中文字幕欧美日韩va免费视频 | www.久久色 | 国产一区视频在线观看免费 | 国产精品第2页 | 久久激情小视频 | 在线观看免费成人 | 欧美成a人片在线观看久 | 欧美日韩国产一区二区三区在线观看 | a√国产免费a | 热99在线| 国偷自产中文字幕亚洲手机在线 | 婷婷亚洲综合五月天小说 | av在线永久免费观看 | 日韩精品一区二区三区免费观看视频 | 在线午夜av| 五月天久久 | 五月情婷婷 | 亚洲天堂网站视频 | bbbbb女女女女女bbbbb国产 | 亚洲欧美日韩在线一区二区 | 免费av 在线| 亚洲国产精品一区二区久久hs | 国产在线观看你懂的 | 色综合久久中文字幕综合网 | 中文字幕无吗 | 欧美日韩1区2区 | 黄色软件网站在线观看 | 天天舔天天射天天操 | 99精品在线观看 | 成人在线视频论坛 | 91社区国产高清 | 中文字幕永久免费 | 二区中文字幕 | 99精品免费在线观看 | 精品一区 在线 | 91超碰免费在线 | 天天综合导航 | 日精品| 婷婷六月天在线 | 亚洲作爱 | 欧美日韩1区2区 | 激情久久久久 | 久久久免费观看视频 | 久久tv| 色婷婷综合久久久 | 最近中文字幕完整视频高清1 | 丁香花在线观看免费完整版视频 | 天天爱天天射天天干天天 | 久艹视频免费观看 | 欧美高清成人 | 一区二区精品视频 | 国产免费成人 | 九九热久久久 | 国产精品一区二区你懂的 | 久草在线最新 | 激情欧美一区二区三区免费看 | 在线观看久 | 一二三精品视频 | 国产精品99久久久精品免费观看 | 婷婷色中文网 | 特级a老妇做爰全过程 | 天天射天天干天天操 | 国产精彩视频一区 | 日韩免费一二三区 | 国产福利av在线 | 韩国精品视频在线观看 | 国产成人精品久久久久蜜臀 | 成人黄色视 | 伊人网站 | 亚洲精品美女在线观看 | 五月婷香蕉久色在线看 | 久久综合九色综合97_ 久久久 | 久久97久久97精品免视看 | 91高清免费在线观看 | 欧美日韩精品免费观看视频 | 国产精品久久久久久久99 | 超碰97人人在线 | 国产精品一区二区三区在线看 | 国产精品 亚洲精品 | 国产又粗又长又硬免费视频 | 日韩在线视频线视频免费网站 | 久草观看视频 | 亚洲精品久久久久中文字幕二区 | 亚洲精品在线网站 | 色天天久久 | 六月丁香伊人 | 天天操天天干天天干 | 天天色棕合合合合合合 | 青青河边草观看完整版高清 | 成人免费在线观看av | 日韩在线观看网站 | 亚洲春色综合另类校园电影 | 四虎永久国产精品 | 久久在线看 | 日韩午夜高清 | 97成人在线观看 | 国产高清免费观看 | 成人性生交视频 | 久草免费资源 | 99这里都是精品 | 日本一区二区不卡高清 | 亚洲年轻女教师毛茸茸 | 国产精品久久久久久久99 | 天天曰 | 久久久精品二区 | 日韩一区二区三区免费视频 | 日韩在线视频免费看 | 精品亚洲在线 | 西西444www大胆高清图片 | 免费高清男女打扑克视频 | 五月花丁香婷婷 | 色噜噜日韩精品欧美一区二区 | 色婷婷av一区 | 中文字幕视频 | 亚洲在线观看av | 精品久久久网 | 久久精品1区2区 | 国产精品小视频网站 | 日日操日日干 | 日韩在线电影一区二区 | 国产资源网站 | 男女男视频 | 中文字幕在线视频免费播放 | 亚洲视频分类 | 亚洲精品成人 | 亚洲午夜大片 | 国产精品精品久久久 | 五月天视频网站 | 在线91播放 | www.色就是色 | 永久免费毛片在线观看 | 亚洲最大av网站 | 国产精选在线 | 日本特黄特色aaa大片免费 | 欧美亚洲精品一区 | a级国产乱理伦片在线观看 亚洲3级 | 欧美成人猛片 | 最新亚洲视频 | 久久久久久久国产精品 | 欧美精品在线一区二区 | 亚洲国产片 | 99国产精品免费网站 | 欧美精品色 | 日本黄色大片儿 | 国产精品久久 | 国产成人久久av | 久草91视频 | 久草在线91 | 国产乱码精品一区二区蜜臀 | 97在线视 | 99视频在线免费播放 | 久草精品视频 | 缴情综合网五月天 | 黄色大片av | 黄色高清视频在线观看 | 日本精品在线看 | av成人免费在线看 | av黄色免费在线观看 | 免费av网站在线 | 色亚洲网 | 亚洲免费高清视频 | 国产精品观看在线亚洲人成网 | 日日操网站| 国产一区91 | 丁五月婷婷 | 成人精品亚洲 | 欧美日韩视频在线一区 | 日韩精品高清不卡 | 国产精品美女免费视频 | 97精品超碰一区二区三区 | 亚洲第一av在线播放 | 国产三级国产精品国产专区50 | 香蕉在线影院 | 国产69精品久久99不卡的观看体验 | 国产白浆视频 | 在线国产中文字幕 | 97人人视频 | 久草在线费播放视频 | 色香蕉在线 | 国产精品wwwwww | 国产精品观看 | 免费一级日韩欧美性大片 | 丁香九月婷婷综合 | 久久久久亚洲精品男人的天堂 | 亚洲精品高清一区二区三区四区 | 久久综合成人网 | 99久久日韩精品免费热麻豆美女 | 日韩91精品 | 久久精彩免费视频 | 97超碰成人在线 | 欧美激情视频三区 | 日本精品久久久久久 | 国产免费观看久久 | www.夜夜操.com| 久亚洲| 奇米网网址 | 久久人人爽av | 国产成人精品一区在线 | 久久精品视频在线 | 久草网站在线观看 | 国产黄色特级片 | 国产精品欧美日韩 | 天天插天天爱 | 午夜久久福利影院 | 久久久麻豆 | 亚洲欧洲日韩 | 激情网站免费观看 | 色婷婷国产在线 | 婷婷丁香激情综合 | 很黄很污的视频网站 | 免费97视频| 国产精品成人久久久久 | av三级av | 免费视频二区 | 国产麻豆精品久久一二三 | 国产精品高潮在线观看 | 国产精品视频地址 | 免费观看黄色12片一级视频 | 黄色最新网址 | 91chinese在线| 丁香花在线视频观看免费 | 丁香花五月 | 久久久久久久国产精品视频 | 国产精品精品视频 | 伊人宗合| 在线 国产 亚洲 欧美 | 国产成人性色生活片 | 99视频精品全部免费 在线 | 国产剧情亚洲 | 免费在线国产 | 三级av网站| 国产一区在线不卡 | 麻豆视频国产在线观看 | 久久国产精品二国产精品中国洋人 | 国产成人亚洲精品自产在线 | a天堂在线看 | 亚洲精品tv | 日韩a在线播放 | 欧美精品v国产精品v日韩精品 | 久久久久久蜜桃一区二区 | 操操操天天操 | 成人激情开心网 | 欧美色久 | 97福利| 免费91麻豆精品国产自产在线观看 | 麻豆视频在线播放 | 成人久久综合 | 成人精品一区二区三区电影免费 | 久久一区91| 久久免费电影 | 不卡的av | 日本xxxx.com| 日本精品视频免费观看 | 99在线观看免费视频精品观看 | 99精品一级欧美片免费播放 | 在线 影视 一区 | 国产手机在线观看视频 | 在线观看www. | 日韩精品播放 | 午夜精品一区二区三区在线播放 | 国产理论在线 | 99精品偷拍视频一区二区三区 | 一区二区亚洲精品 | 久久国产精品一区二区三区四区 | 亚洲四虎在线 | 国产欧美最新羞羞视频在线观看 | 五月开心六月伊人色婷婷 | 999久久久 | 在线a人片免费观看视频 | 男女激情网址 | 亚洲美女精品区人人人人 | 国产极品尤物在线 | 国语精品免费视频 | 国产精品女人网站 | avwww在线观看 | av性网站| 国产精品1区2区3区在线观看 | 999超碰 | 成人久久久久久久久 | 91麻豆产精品久久久久久 | av电影免费 | 午夜影视剧场 | 亚洲婷久久| 97视频在线观看播放 | 国产不卡在线视频 | 欧美日韩高清一区二区三区 | 亚洲传媒在线 | 国产精品久久久久久99 | 免费视频一区 | 亚洲成av人影片在线观看 | 亚洲国产偷 | 国产精品v a免费视频 | 国产成人在线观看 | 色播激情五月 | 麻豆91精品91久久久 | 亚洲色图27p | 欧美日韩高清免费 | 日精品 | 色欲综合视频天天天 | 91你懂的 | 欧美一级片在线观看视频 | 99热在线网站| 日韩精品视频免费在线观看 | 在线有码中文字幕 | 91中文在线 | 91亚·色| 六月色丁香 | 精品国产自在精品国产精野外直播 | 欧美一级片在线免费观看 | 99热最新网址 | 五月婷婷丁香 | 久久看毛片 | 成人欧美一区二区三区黑人麻豆 | 婷婷丁香久久五月婷婷 | 偷拍区另类综合在线 | 久久久国产精品免费 | 欧美久久久一区二区三区 | 色婷婷 亚洲 | 国产黄大片在线观看 | 久久这里只有精品视频首页 | 日韩在线观看av | 日韩欧美一级二级 | 视频在线观看99 | 91人网站 | 91精品爽啪蜜夜国产在线播放 | 久久香蕉电影 | 91福利视频网站 | 天天操天天操天天操天天 | 国产成人在线综合 | 免费在线观看黄 | 国产小视频免费观看 | av一级二级| 亚洲精品久久激情国产片 | av大全在线看 | 三级视频日韩 | 成年人在线观看网站 | 日韩精品一区二区久久 | 久久免费一 | 涩涩网站在线 | av一级一片 | 国产精品久久久久久婷婷天堂 | 免费av看片| 97精品视频在线播放 | 91精品爽啪蜜夜国产在线播放 | 欧美日韩99| 国产精品 日韩精品 | 深爱五月激情网 | 婷婷久久五月天 | 日韩欧美一级二级 | 2023亚洲精品国偷拍自产在线 | 国产五月 | 国产h在线观看 | 曰韩精品 | 久久午夜电影院 | 永久免费在线 |