You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by an...@apache.org on 2018/08/21 05:31:19 UTC
[19/22] zookeeper git commit: ZOOKEEPER-3031: MAVEN MIGRATION - Step
1.4 - move client dir
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/include/zookeeper_log.h
----------------------------------------------------------------------
diff --git a/src/c/include/zookeeper_log.h b/src/c/include/zookeeper_log.h
deleted file mode 100644
index 56a9b73..0000000
--- a/src/c/include/zookeeper_log.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ZK_LOG_H_
-#define ZK_LOG_H_
-
-#include <zookeeper.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern ZOOAPI ZooLogLevel logLevel;
-#define LOGCALLBACK(_zh) zoo_get_log_callback(_zh)
-#define LOGSTREAM NULL
-
-#define LOG_ERROR(_cb, ...) if(logLevel>=ZOO_LOG_LEVEL_ERROR) \
- log_message(_cb, ZOO_LOG_LEVEL_ERROR, __LINE__, __func__, __VA_ARGS__)
-#define LOG_WARN(_cb, ...) if(logLevel>=ZOO_LOG_LEVEL_WARN) \
- log_message(_cb, ZOO_LOG_LEVEL_WARN, __LINE__, __func__, __VA_ARGS__)
-#define LOG_INFO(_cb, ...) if(logLevel>=ZOO_LOG_LEVEL_INFO) \
- log_message(_cb, ZOO_LOG_LEVEL_INFO, __LINE__, __func__, __VA_ARGS__)
-#define LOG_DEBUG(_cb, ...) if(logLevel==ZOO_LOG_LEVEL_DEBUG) \
- log_message(_cb, ZOO_LOG_LEVEL_DEBUG, __LINE__, __func__, __VA_ARGS__)
-
-ZOOAPI void log_message(log_callback_fn callback, ZooLogLevel curLevel,
- int line, const char* funcName, const char* format, ...);
-
-FILE* zoo_get_log_stream();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*ZK_LOG_H_*/
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/include/zookeeper_version.h
----------------------------------------------------------------------
diff --git a/src/c/include/zookeeper_version.h b/src/c/include/zookeeper_version.h
deleted file mode 100644
index 1633cab..0000000
--- a/src/c/include/zookeeper_version.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef ZOOKEEPER_VERSION_H_
-#define ZOOKEEPER_VERSION_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZOO_MAJOR_VERSION 3
-#define ZOO_MINOR_VERSION 6
-#define ZOO_PATCH_VERSION 0
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ZOOKEEPER_VERSION_H_ */
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/addrvec.c
----------------------------------------------------------------------
diff --git a/src/c/src/addrvec.c b/src/c/src/addrvec.c
deleted file mode 100644
index fdfb68d..0000000
--- a/src/c/src/addrvec.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#ifdef WIN32
-#define random rand /* replace POSIX random with Windows rand */
-#include <winsock2.h> /* must always be included before ws2tcpip.h */
-#include <ws2tcpip.h> /* for sockaddr_storage */
-#include "winport.h"
-#endif
-
-#include "addrvec.h"
-
-#define ADDRVEC_DEFAULT_GROW_AMOUNT 16
-
-void addrvec_init(addrvec_t *avec)
-{
- assert(avec);
- avec->next = 0;
- avec->count = 0;
- avec->capacity = 0;
- avec->data = NULL;
-}
-
-void addrvec_free(addrvec_t *avec)
-{
- if (avec == NULL)
- {
- return;
- }
-
- avec->next = 0;
- avec->count = 0;
- avec->capacity = 0;
- if (avec->data) {
- free(avec->data);
- avec->data = NULL;
- }
-}
-
-int addrvec_alloc(addrvec_t *avec)
-{
- addrvec_init(avec);
- return addrvec_grow_default(avec);
-}
-
-int addrvec_alloc_capacity(addrvec_t* avec, uint32_t capacity)
-{
- addrvec_init(avec);
- return addrvec_grow(avec, capacity);
-}
-
-int addrvec_grow(addrvec_t *avec, uint32_t grow_amount)
-{
- unsigned int old_capacity = 0;
- struct sockaddr_storage *old_data = NULL;
- assert(avec);
-
- if (grow_amount == 0)
- {
- return 0;
- }
-
- // Save off old data and capacity in case there is a realloc failure
- old_capacity = avec->capacity;
- old_data = avec->data;
-
- avec->capacity += grow_amount;
- avec->data = realloc(avec->data, sizeof(*avec->data) * avec->capacity);
- if (avec->data == NULL)
- {
- avec->capacity = old_capacity;
- avec->data = old_data;
- errno = ENOMEM;
- return 1;
- }
-
- return 0;
-}
-
-int addrvec_grow_default(addrvec_t *avec)
-{
- return addrvec_grow(avec, ADDRVEC_DEFAULT_GROW_AMOUNT);
-}
-
-static int addrvec_grow_if_full(addrvec_t *avec)
-{
- assert(avec);
- if (avec->count == avec->capacity)
- {
- int rc = addrvec_grow_default(avec);
- if (rc != 0)
- {
- return rc;
- }
- }
-
- return 0;
-}
-
-int addrvec_contains(const addrvec_t *avec, const struct sockaddr_storage *addr)
-{
- uint32_t i = 0;
- if (!avec || !addr)
- {
- return 0;
- }
-
- for (i = 0; i < avec->count; i++)
- {
- if(memcmp(&avec->data[i], addr, INET_ADDRSTRLEN) == 0)
- return 1;
- }
-
- return 0;
-}
-
-int addrvec_append(addrvec_t *avec, const struct sockaddr_storage *addr)
-{
- int rc = 0;
- assert(avec);
- assert(addr);
-
- rc = addrvec_grow_if_full(avec);
- if (rc != 0)
- {
- return rc;
- }
-
- // Copy addrinfo into address list
- memcpy(avec->data + avec->count, addr, sizeof(*addr));
- ++avec->count;
-
- return 0;
-}
-
-int addrvec_append_addrinfo(addrvec_t *avec, const struct addrinfo *addrinfo)
-{
- int rc = 0;
- assert(avec);
- assert(addrinfo);
-
- rc = addrvec_grow_if_full(avec);
- if (rc != 0)
- {
- return rc;
- }
-
- // Copy addrinfo into address list
- memcpy(avec->data + avec->count, addrinfo->ai_addr, addrinfo->ai_addrlen);
- ++avec->count;
-
- return 0;
-}
-
-void addrvec_shuffle(addrvec_t *avec)
-{
- int i = 0;
- for (i = avec->count - 1; i > 0; --i) {
- long int j = random()%(i+1);
- if (i != j) {
- struct sockaddr_storage t = avec->data[i];
- avec->data[i] = avec->data[j];
- avec->data[j] = t;
- }
- }
-}
-
-int addrvec_hasnext(const addrvec_t *avec)
-{
- return avec->count > 0 && (avec->next < avec->count);
-}
-
-int addrvec_atend(const addrvec_t *avec)
-{
- return avec->count > 0 && avec->next >= avec->count;
-}
-
-void addrvec_next(addrvec_t *avec, struct sockaddr_storage *next)
-{
- int index;
-
- // If we're at the end of the list, then reset index to start
- if (addrvec_atend(avec)) {
- avec->next = 0;
- }
-
- if (!addrvec_hasnext(avec)) {
- if (next) {
- memset(next, 0, sizeof(*next));
- }
-
- return;
- }
-
- index = avec->next++;
-
- if (next) {
- *next = avec->data[index];
- }
-}
-
-void addrvec_peek(addrvec_t *avec, struct sockaddr_storage *next)
-{
- int index = avec->next;
-
- if (avec->count == 0) {
- memset(next, 0, sizeof(*next));
- return;
- }
-
- if (addrvec_atend(avec)) {
- index = 0;
- }
-
- *next = avec->data[index];
-}
-
-
-int addrvec_eq(const addrvec_t *a1, const addrvec_t *a2)
-{
- uint32_t i = 0;
- if (a1->count != a2->count)
- {
- return 0;
- }
-
- for (i = 0; i < a1->count; ++i)
- {
- if (!addrvec_contains(a2, &a1->data[i]))
- return 0;
- }
-
- return 1;
-}
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/addrvec.h
----------------------------------------------------------------------
diff --git a/src/c/src/addrvec.h b/src/c/src/addrvec.h
deleted file mode 100644
index a126429..0000000
--- a/src/c/src/addrvec.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ADDRVEC_H_
-#define ADDRVEC_H_
-
-#ifndef WIN32
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#else
-#include <WinSock2.h>
-#include <stdint.h>
-#endif
-
-/**
- * This structure represents a list of addresses. It stores the count of the
- * number of elements that have been inserted via calls to addrvec_append and
- * addrvec_append_addrinfo. It also has a capacity field for the number of
- * addresses it has the ability to hold without needing to be enlarged.
- */
-typedef struct _addrvec {
- unsigned int next; // next index to use
- unsigned int count; // number of addresses in this list
- unsigned int capacity; // number of address this list can hold
- struct sockaddr_storage *data; // list of addresses
-} addrvec_t;
-
-/**
- * Initialize an addrvec by clearing out all its state.
- */
-void addrvec_init(addrvec_t *avec);
-
-/**
- * Free any memory used internally by an addrvec
- */
-void addrvec_free(addrvec_t *avec);
-
-/**
- * Allocate an addrvec with a default capacity (16)
- */
-int addrvec_alloc(addrvec_t *avec);
-
-/**
- * Allocates an addrvec with a specified capacity
- */
-int addrvec_alloc_capacity(addrvec_t *avec, uint32_t capacity);
-
-/**
- * Grow an addrvec by the specified amount. This will increase the capacity
- * of the vector and not the contents.
- */
-int addrvec_grow(addrvec_t *avec, uint32_t grow_amount);
-
-/**
- * Similar to addrvec_grow but uses a default growth amount of 16.
- */
-int addrvec_grow_default(addrvec_t *avec);
-
-/**
- * Check if an addrvec contains the specificed sockaddr_storage value.
- * \returns 1 if it contains the value and 0 otherwise.
- */
-int addrvec_contains(const addrvec_t *avec, const struct sockaddr_storage *addr);
-
-/**
- * Append the given sockaddr_storage pointer into the addrvec. The contents of
- * the given 'addr' are copied into the addrvec via memcpy.
- */
-int addrvec_append(addrvec_t *avec, const struct sockaddr_storage *addr);
-
-/**
- * Append the given addrinfo pointer into the addrvec. The contents of the given
- * 'addrinfo' are copied into the addrvec via memcpy.
- */
-int addrvec_append_addrinfo(addrvec_t *avec, const struct addrinfo *addrinfo);
-
-/**
- * Shuffle the addrvec so that it's internal list of addresses are randomized.
- * Uses random() and assumes it has been properly seeded.
- */
-void addrvec_shuffle(addrvec_t *avec);
-
-/**
- * Determine if the addrvec has a next element (e.g. it's safe to call addrvec_next)
- *
- * \returns 1 if it has a next element and 0 otherwise
- */
-int addrvec_hasnext(const addrvec_t *avec);
-
-/**
- * Determine if the addrvec is at the end or not. Specifically, this means a
- * subsequent call to addrvec_next will loop around to the start again.
- */
-int addrvec_atend(const addrvec_t *avec);
-
-/**
- * Get the next entry from the addrvec and update the associated index.
- *
- * If next is NULL, the index will still be updated.
- *
- * If the current index points at (or after) the last element in the vector then
- * it will loop back around and start at the beginning of the list.
- */
-void addrvec_next(addrvec_t *avec, struct sockaddr_storage *next);
-
-/**
- * Retrieves the next entry from the addrvec but doesn't update the index.
- */
-void addrvec_peek(addrvec_t *avec, struct sockaddr_storage *next);
-
-/**
- * Compare two addrvecs for equality.
- *
- * \returns 1 if the contents of the two lists are identical and and 0 otherwise.
- */
-int addrvec_eq(const addrvec_t *a1, const addrvec_t *a2);
-
-#endif // ADDRVEC_H
-
-
-
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/cli.c
----------------------------------------------------------------------
diff --git a/src/c/src/cli.c b/src/c/src/cli.c
deleted file mode 100644
index 6ca4a41..0000000
--- a/src/c/src/cli.c
+++ /dev/null
@@ -1,836 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * cli.c is a example/sample C client shell for ZooKeeper. It contains
- * basic shell functionality which exercises some of the features of
- * the ZooKeeper C client API. It is not a full fledged client and is
- * not meant for production usage - see the Java client shell for a
- * fully featured shell.
- */
-
-#include <zookeeper.h>
-#include <proto.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifndef WIN32
-#include <sys/time.h>
-#include <unistd.h>
-#include <sys/select.h>
-#else
-#include "winport.h"
-//#include <io.h> <-- can't include, conflicting definitions of close()
-int read(int _FileHandle, void * _DstBuf, unsigned int _MaxCharCount);
-int write(int _Filehandle, const void * _Buf, unsigned int _MaxCharCount);
-#define ctime_r(tctime, buffer) ctime_s (buffer, 40, tctime)
-#endif
-
-#include <time.h>
-#include <errno.h>
-#include <assert.h>
-
-#ifdef YCA
-#include <yca/yca.h>
-#endif
-
-#define _LL_CAST_ (long long)
-
-static zhandle_t *zh;
-static clientid_t myid;
-static const char *clientIdFile = 0;
-struct timeval startTime;
-static char cmd[1024];
-static int batchMode=0;
-
-static int to_send=0;
-static int sent=0;
-static int recvd=0;
-
-static int shutdownThisThing=0;
-
-static __attribute__ ((unused)) void
-printProfileInfo(struct timeval start, struct timeval end, int thres,
- const char* msg)
-{
- int delay=(end.tv_sec*1000+end.tv_usec/1000)-
- (start.tv_sec*1000+start.tv_usec/1000);
- if(delay>thres)
- fprintf(stderr,"%s: execution time=%dms\n",msg,delay);
-}
-
-static const char* state2String(int state){
- if (state == 0)
- return "CLOSED_STATE";
- if (state == ZOO_CONNECTING_STATE)
- return "CONNECTING_STATE";
- if (state == ZOO_ASSOCIATING_STATE)
- return "ASSOCIATING_STATE";
- if (state == ZOO_CONNECTED_STATE)
- return "CONNECTED_STATE";
- if (state == ZOO_READONLY_STATE)
- return "READONLY_STATE";
- if (state == ZOO_EXPIRED_SESSION_STATE)
- return "EXPIRED_SESSION_STATE";
- if (state == ZOO_AUTH_FAILED_STATE)
- return "AUTH_FAILED_STATE";
-
- return "INVALID_STATE";
-}
-
-static const char* type2String(int state){
- if (state == ZOO_CREATED_EVENT)
- return "CREATED_EVENT";
- if (state == ZOO_DELETED_EVENT)
- return "DELETED_EVENT";
- if (state == ZOO_CHANGED_EVENT)
- return "CHANGED_EVENT";
- if (state == ZOO_CHILD_EVENT)
- return "CHILD_EVENT";
- if (state == ZOO_SESSION_EVENT)
- return "SESSION_EVENT";
- if (state == ZOO_NOTWATCHING_EVENT)
- return "NOTWATCHING_EVENT";
-
- return "UNKNOWN_EVENT_TYPE";
-}
-
-void watcher(zhandle_t *zzh, int type, int state, const char *path,
- void* context)
-{
- /* Be careful using zh here rather than zzh - as this may be mt code
- * the client lib may call the watcher before zookeeper_init returns */
-
- fprintf(stderr, "Watcher %s state = %s", type2String(type), state2String(state));
- if (path && strlen(path) > 0) {
- fprintf(stderr, " for path %s", path);
- }
- fprintf(stderr, "\n");
-
- if (type == ZOO_SESSION_EVENT) {
- if (state == ZOO_CONNECTED_STATE) {
- const clientid_t *id = zoo_client_id(zzh);
- if (myid.client_id == 0 || myid.client_id != id->client_id) {
- myid = *id;
- fprintf(stderr, "Got a new session id: 0x%llx\n",
- _LL_CAST_ myid.client_id);
- if (clientIdFile) {
- FILE *fh = fopen(clientIdFile, "w");
- if (!fh) {
- perror(clientIdFile);
- } else {
- int rc = fwrite(&myid, sizeof(myid), 1, fh);
- if (rc != sizeof(myid)) {
- perror("writing client id");
- }
- fclose(fh);
- }
- }
- }
- } else if (state == ZOO_AUTH_FAILED_STATE) {
- fprintf(stderr, "Authentication failure. Shutting down...\n");
- zookeeper_close(zzh);
- shutdownThisThing=1;
- zh=0;
- } else if (state == ZOO_EXPIRED_SESSION_STATE) {
- fprintf(stderr, "Session expired. Shutting down...\n");
- zookeeper_close(zzh);
- shutdownThisThing=1;
- zh=0;
- }
- }
-}
-
-void dumpStat(const struct Stat *stat) {
- char tctimes[40];
- char tmtimes[40];
- time_t tctime;
- time_t tmtime;
-
- if (!stat) {
- fprintf(stderr,"null\n");
- return;
- }
- tctime = stat->ctime/1000;
- tmtime = stat->mtime/1000;
-
- ctime_r(&tmtime, tmtimes);
- ctime_r(&tctime, tctimes);
-
- fprintf(stderr, "\tctime = %s\tczxid=%llx\n"
- "\tmtime=%s\tmzxid=%llx\n"
- "\tversion=%x\taversion=%x\n"
- "\tephemeralOwner = %llx\n",
- tctimes, _LL_CAST_ stat->czxid, tmtimes,
- _LL_CAST_ stat->mzxid,
- (unsigned int)stat->version, (unsigned int)stat->aversion,
- _LL_CAST_ stat->ephemeralOwner);
-}
-
-void my_string_completion(int rc, const char *name, const void *data) {
- fprintf(stderr, "[%s]: rc = %d\n", (char*)(data==0?"null":data), rc);
- if (!rc) {
- fprintf(stderr, "\tname = %s\n", name);
- }
- if(batchMode)
- shutdownThisThing=1;
-}
-
-void my_string_completion_free_data(int rc, const char *name, const void *data) {
- my_string_completion(rc, name, data);
- free((void*)data);
-}
-
-void my_string_stat_completion(int rc, const char *name, const struct Stat *stat,
- const void *data) {
- my_string_completion(rc, name, data);
- dumpStat(stat);
-}
-
-void my_string_stat_completion_free_data(int rc, const char *name,
- const struct Stat *stat, const void *data) {
- my_string_stat_completion(rc, name, stat, data);
- free((void*)data);
-}
-
-void my_data_completion(int rc, const char *value, int value_len,
- const struct Stat *stat, const void *data) {
- struct timeval tv;
- int sec;
- int usec;
- gettimeofday(&tv, 0);
- sec = tv.tv_sec - startTime.tv_sec;
- usec = tv.tv_usec - startTime.tv_usec;
- fprintf(stderr, "time = %d msec\n", sec*1000 + usec/1000);
- fprintf(stderr, "%s: rc = %d\n", (char*)data, rc);
- if (value) {
- fprintf(stderr, " value_len = %d\n", value_len);
- assert(write(2, value, value_len) == value_len);
- }
- fprintf(stderr, "\nStat:\n");
- dumpStat(stat);
- free((void*)data);
- if(batchMode)
- shutdownThisThing=1;
-}
-
-void my_silent_data_completion(int rc, const char *value, int value_len,
- const struct Stat *stat, const void *data) {
- recvd++;
- fprintf(stderr, "Data completion %s rc = %d\n",(char*)data,rc);
- free((void*)data);
- if (recvd==to_send) {
- fprintf(stderr,"Recvd %d responses for %d requests sent\n",recvd,to_send);
- if(batchMode)
- shutdownThisThing=1;
- }
-}
-
-void my_strings_completion(int rc, const struct String_vector *strings,
- const void *data) {
- struct timeval tv;
- int sec;
- int usec;
- int i;
-
- gettimeofday(&tv, 0);
- sec = tv.tv_sec - startTime.tv_sec;
- usec = tv.tv_usec - startTime.tv_usec;
- fprintf(stderr, "time = %d msec\n", sec*1000 + usec/1000);
- fprintf(stderr, "%s: rc = %d\n", (char*)data, rc);
- if (strings)
- for (i=0; i < strings->count; i++) {
- fprintf(stderr, "\t%s\n", strings->data[i]);
- }
- free((void*)data);
- gettimeofday(&tv, 0);
- sec = tv.tv_sec - startTime.tv_sec;
- usec = tv.tv_usec - startTime.tv_usec;
- fprintf(stderr, "time = %d msec\n", sec*1000 + usec/1000);
- if(batchMode)
- shutdownThisThing=1;
-}
-
-void my_strings_stat_completion(int rc, const struct String_vector *strings,
- const struct Stat *stat, const void *data) {
- my_strings_completion(rc, strings, data);
- dumpStat(stat);
- if(batchMode)
- shutdownThisThing=1;
-}
-
-void my_void_completion(int rc, const void *data) {
- fprintf(stderr, "%s: rc = %d\n", (char*)data, rc);
- free((void*)data);
- if(batchMode)
- shutdownThisThing=1;
-}
-
-void my_stat_completion(int rc, const struct Stat *stat, const void *data) {
- fprintf(stderr, "%s: rc = %d Stat:\n", (char*)data, rc);
- dumpStat(stat);
- free((void*)data);
- if(batchMode)
- shutdownThisThing=1;
-}
-
-void my_silent_stat_completion(int rc, const struct Stat *stat,
- const void *data) {
- // fprintf(stderr, "State completion: [%s] rc = %d\n", (char*)data, rc);
- sent++;
- free((void*)data);
-}
-
-static void sendRequest(const char* data) {
- zoo_aset(zh, "/od", data, strlen(data), -1, my_silent_stat_completion,
- strdup("/od"));
- zoo_aget(zh, "/od", 1, my_silent_data_completion, strdup("/od"));
-}
-
-void od_completion(int rc, const struct Stat *stat, const void *data) {
- int i;
- fprintf(stderr, "od command response: rc = %d Stat:\n", rc);
- dumpStat(stat);
- // send a whole bunch of requests
- recvd=0;
- sent=0;
- to_send=200;
- for (i=0; i<to_send; i++) {
- char buf[4096*16];
- memset(buf, -1, sizeof(buf)-1);
- buf[sizeof(buf)-1]=0;
- sendRequest(buf);
- }
-}
-
-int startsWith(const char *line, const char *prefix) {
- int len = strlen(prefix);
- return strncmp(line, prefix, len) == 0;
-}
-
-static const char *hostPort;
-static int verbose = 0;
-
-void processline(char *line) {
- int rc;
- int async = ((line[0] == 'a') && !(startsWith(line, "addauth ")));
- if (async) {
- line++;
- }
- if (startsWith(line, "help")) {
- fprintf(stderr, " create [+[e|s]] <path>\n");
- fprintf(stderr, " create2 [+[e|s]] <path>\n");
- fprintf(stderr, " delete <path>\n");
- fprintf(stderr, " set <path> <data>\n");
- fprintf(stderr, " get <path>\n");
- fprintf(stderr, " ls <path>\n");
- fprintf(stderr, " ls2 <path>\n");
- fprintf(stderr, " sync <path>\n");
- fprintf(stderr, " exists <path>\n");
- fprintf(stderr, " wexists <path>\n");
- fprintf(stderr, " myid\n");
- fprintf(stderr, " verbose\n");
- fprintf(stderr, " addauth <id> <scheme>\n");
- fprintf(stderr, " config\n");
- fprintf(stderr, " reconfig [-file <path> | -members <serverId=host:port1:port2;port3>,... | "
- " -add <serverId=host:port1:port2;port3>,... | -remove <serverId>,...] [-version <version>]\n");
- fprintf(stderr, " quit\n");
- fprintf(stderr, "\n");
- fprintf(stderr, " prefix the command with the character 'a' to run the command asynchronously.\n");
- fprintf(stderr, " run the 'verbose' command to toggle verbose logging.\n");
- fprintf(stderr, " i.e. 'aget /foo' to get /foo asynchronously\n");
- } else if (startsWith(line, "verbose")) {
- if (verbose) {
- verbose = 0;
- zoo_set_debug_level(ZOO_LOG_LEVEL_WARN);
- fprintf(stderr, "logging level set to WARN\n");
- } else {
- verbose = 1;
- zoo_set_debug_level(ZOO_LOG_LEVEL_DEBUG);
- fprintf(stderr, "logging level set to DEBUG\n");
- }
- } else if (startsWith(line, "get ")) {
- line += 4;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
-
- rc = zoo_aget(zh, line, 1, my_data_completion, strdup(line));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (strcmp(line, "config") == 0) {
- gettimeofday(&startTime, 0);
- rc = zoo_agetconfig(zh, 1, my_data_completion, strdup(ZOO_CONFIG_NODE));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "reconfig ")) {
- int syntaxError = 0;
- char* p = NULL;
- char* joining = NULL;
- char* leaving = NULL;
- char* members = NULL;
- size_t members_size = 0;
-
- int mode = 0; // 0 = not set, 1 = incremental, 2 = non-incremental
- int64_t version = -1;
-
- line += 9;
- p = strtok (strdup(line)," ");
- while (p != NULL) {
- if (strcmp(p, "-add")==0) {
- p = strtok (NULL," ");
- if (mode == 2 || p == NULL) {
- syntaxError = 1;
- break;
- }
- mode = 1;
- joining = strdup(p);
- } else if (strcmp(p, "-remove")==0){
- p = strtok (NULL," ");
- if (mode == 2 || p == NULL) {
- syntaxError = 1;
- break;
- }
- mode = 1;
- leaving = strdup(p);
- } else if (strcmp(p, "-members")==0) {
- p = strtok (NULL," ");
- if (mode == 1 || p == NULL) {
- syntaxError = 1;
- break;
- }
- mode = 2;
- members = strdup(p);
- } else if (strcmp(p, "-file")==0){
- FILE *fp = NULL;
- p = strtok (NULL," ");
- if (mode == 1 || p == NULL) {
- syntaxError = 1;
- break;
- }
- mode = 2;
- fp = fopen(p, "r");
- if (fp == NULL) {
- fprintf(stderr, "Error reading file: %s\n", p);
- syntaxError = 1;
- break;
- }
- fseek(fp, 0L, SEEK_END); /* Position to end of file */
- members_size = ftell(fp); /* Get file length */
- rewind(fp); /* Back to start of file */
- members = calloc(members_size + 1, sizeof(char));
- if(members == NULL )
- {
- fprintf(stderr, "\nInsufficient memory to read file: %s\n", p);
- syntaxError = 1;
- fclose(fp);
- break;
- }
-
- /* Read the entire file into members
- * NOTE: -- fread returns number of items successfully read
- * not the number of bytes. We're requesting one item of
- * members_size bytes. So we expect the return value here
- * to be 1.
- */
- if (fread(members, members_size, 1, fp) != 1){
- fprintf(stderr, "Error reading file: %s\n", p);
- syntaxError = 1;
- fclose(fp);
- break;
- }
- fclose(fp);
- } else if (strcmp(p, "-version")==0){
- p = strtok (NULL," ");
- if (version != -1 || p == NULL){
- syntaxError = 1;
- break;
- }
-#ifdef WIN32
- version = _strtoui64(p, NULL, 16);
-#else
- version = strtoull(p, NULL, 16);
-#endif
- if (version < 0) {
- syntaxError = 1;
- break;
- }
- } else {
- syntaxError = 1;
- break;
- }
- p = strtok (NULL," ");
- }
- if (syntaxError) return;
-
- rc = zoo_areconfig(zh, joining, leaving, members, version, my_data_completion, strdup(line));
- free(joining);
- free(leaving);
- free(members);
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
-
- } else if (startsWith(line, "set ")) {
- char *ptr;
- line += 4;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
- ptr = strchr(line, ' ');
- if (!ptr) {
- fprintf(stderr, "No data found after path\n");
- return;
- }
- *ptr = '\0';
- ptr++;
- rc = zoo_aset(zh, line, ptr, strlen(ptr), -1, my_stat_completion,
- strdup(line));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "ls ")) {
- line += 3;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
- gettimeofday(&startTime, 0);
- rc= zoo_aget_children(zh, line, 1, my_strings_completion, strdup(line));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "ls2 ")) {
- line += 4;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
- gettimeofday(&startTime, 0);
- rc= zoo_aget_children2(zh, line, 1, my_strings_stat_completion, strdup(line));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "create ") || startsWith(line, "create2 ")) {
- int flags = 0;
- int is_create2 = startsWith(line, "create2 ");
- line += is_create2 ? 8 : 7;
- if (line[0] == '+') {
- line++;
- if (line[0] == 'e') {
- flags |= ZOO_EPHEMERAL;
- line++;
- }
- if (line[0] == 's') {
- flags |= ZOO_SEQUENCE;
- line++;
- }
- line++;
- }
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
- fprintf(stderr, "Creating [%s] node\n", line);
-// {
-// struct ACL _CREATE_ONLY_ACL_ACL[] = {{ZOO_PERM_CREATE, ZOO_ANYONE_ID_UNSAFE}};
-// struct ACL_vector CREATE_ONLY_ACL = {1,_CREATE_ONLY_ACL_ACL};
-// rc = zoo_acreate(zh, line, "new", 3, &CREATE_ONLY_ACL, flags,
-// my_string_completion, strdup(line));
-// }
- if (is_create2) {
- rc = zoo_acreate2(zh, line, "new", 3, &ZOO_OPEN_ACL_UNSAFE, flags,
- my_string_stat_completion_free_data, strdup(line));
- } else {
- rc = zoo_acreate(zh, line, "new", 3, &ZOO_OPEN_ACL_UNSAFE, flags,
- my_string_completion_free_data, strdup(line));
- }
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "delete ")) {
- line += 7;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
- rc = zoo_adelete(zh, line, -1, my_void_completion, strdup(line));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "sync ")) {
- line += 5;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
- rc = zoo_async(zh, line, my_string_completion_free_data, strdup(line));
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "wexists ")) {
-#ifdef THREADED
- struct Stat stat;
-#endif
- line += 8;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
-#ifndef THREADED
- rc = zoo_awexists(zh, line, watcher, (void*) 0, my_stat_completion, strdup(line));
-#else
- rc = zoo_wexists(zh, line, watcher, (void*) 0, &stat);
-#endif
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (startsWith(line, "exists ")) {
-#ifdef THREADED
- struct Stat stat;
-#endif
- line += 7;
- if (line[0] != '/') {
- fprintf(stderr, "Path must start with /, found: %s\n", line);
- return;
- }
-#ifndef THREADED
- rc = zoo_aexists(zh, line, 1, my_stat_completion, strdup(line));
-#else
- rc = zoo_exists(zh, line, 1, &stat);
-#endif
- if (rc) {
- fprintf(stderr, "Error %d for %s\n", rc, line);
- }
- } else if (strcmp(line, "myid") == 0) {
- printf("session Id = %llx\n", _LL_CAST_ zoo_client_id(zh)->client_id);
- } else if (strcmp(line, "reinit") == 0) {
- zookeeper_close(zh);
- // we can't send myid to the server here -- zookeeper_close() removes
- // the session on the server. We must start anew.
- zh = zookeeper_init(hostPort, watcher, 30000, 0, 0, 0);
- } else if (startsWith(line, "quit")) {
- fprintf(stderr, "Quitting...\n");
- shutdownThisThing=1;
- } else if (startsWith(line, "od")) {
- const char val[]="fire off";
- fprintf(stderr, "Overdosing...\n");
- rc = zoo_aset(zh, "/od", val, sizeof(val)-1, -1, od_completion, 0);
- if (rc)
- fprintf(stderr, "od command failed: %d\n", rc);
- } else if (startsWith(line, "addauth ")) {
- char *ptr;
- line += 8;
- ptr = strchr(line, ' ');
- if (ptr) {
- *ptr = '\0';
- ptr++;
- }
- zoo_add_auth(zh, line, ptr, ptr ? strlen(ptr) : 0, NULL, NULL);
- }
-}
-
-int main(int argc, char **argv) {
-#ifndef THREADED
- fd_set rfds, wfds, efds;
- int processed=0;
-#endif
- char buffer[4096];
- char p[2048];
-#ifdef YCA
- char *cert=0;
- char appId[64];
-#endif
- int bufoff = 0;
- int flags, i;
- FILE *fh;
-
- if (argc < 2) {
- fprintf(stderr,
- "USAGE %s zookeeper_host_list [clientid_file|cmd:(ls|ls2|create|create2|od|...)]\n",
- argv[0]);
- fprintf(stderr,
- "Version: ZooKeeper cli (c client) version %d.%d.%d\n",
- ZOO_MAJOR_VERSION,
- ZOO_MINOR_VERSION,
- ZOO_PATCH_VERSION);
- return 2;
- }
- if (argc > 2) {
- if(strncmp("cmd:",argv[2],4)==0){
- size_t cmdlen = strlen(argv[2]);
- if (cmdlen > sizeof(cmd)) {
- fprintf(stderr,
- "Command length %zu exceeds max length of %zu\n",
- cmdlen,
- sizeof(cmd));
- return 2;
- }
- strncpy(cmd, argv[2]+4, sizeof(cmd));
- batchMode=1;
- fprintf(stderr,"Batch mode: %s\n",cmd);
- }else{
- clientIdFile = argv[2];
- fh = fopen(clientIdFile, "r");
- if (fh) {
- if (fread(&myid, sizeof(myid), 1, fh) != sizeof(myid)) {
- memset(&myid, 0, sizeof(myid));
- }
- fclose(fh);
- }
- }
- }
-
- flags = 0;
- for (i = 1; i < argc; ++i) {
- if (strcmp("-r", argv[i]) == 0) {
- flags = ZOO_READONLY;
- break;
- }
- }
-
-#ifdef YCA
- strcpy(appId,"yahoo.example.yca_test");
- cert = yca_get_cert_once(appId);
- if(cert!=0) {
- fprintf(stderr,"Certificate for appid [%s] is [%s]\n",appId,cert);
- strncpy(p,cert,sizeof(p)-1);
- free(cert);
- } else {
- fprintf(stderr,"Certificate for appid [%s] not found\n",appId);
- strcpy(p,"dummy");
- }
-#else
- strcpy(p, "dummy");
-#endif
- verbose = 0;
- zoo_set_debug_level(ZOO_LOG_LEVEL_WARN);
- zoo_deterministic_conn_order(1); // enable deterministic order
- hostPort = argv[1];
- zh = zookeeper_init(hostPort, watcher, 30000, &myid, NULL, flags);
- if (!zh) {
- return errno;
- }
-
-#ifdef YCA
- if(zoo_add_auth(zh,"yca",p,strlen(p),0,0)!=ZOK)
- return 2;
-#endif
-
-#ifdef THREADED
- while(!shutdownThisThing) {
- int rc;
- int len = sizeof(buffer) - bufoff -1;
- if (len <= 0) {
- fprintf(stderr, "Can't handle lines that long!\n");
- exit(2);
- }
- rc = read(0, buffer+bufoff, len);
- if (rc <= 0) {
- fprintf(stderr, "bye\n");
- shutdownThisThing=1;
- break;
- }
- bufoff += rc;
- buffer[bufoff] = '\0';
- while (strchr(buffer, '\n')) {
- char *ptr = strchr(buffer, '\n');
- *ptr = '\0';
- processline(buffer);
- ptr++;
- memmove(buffer, ptr, strlen(ptr)+1);
- bufoff = 0;
- }
- }
-#else
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- FD_ZERO(&efds);
- while (!shutdownThisThing) {
- int fd;
- int interest;
- int events;
- struct timeval tv;
- int rc;
- zookeeper_interest(zh, &fd, &interest, &tv);
- if (fd != -1) {
- if (interest&ZOOKEEPER_READ) {
- FD_SET(fd, &rfds);
- } else {
- FD_CLR(fd, &rfds);
- }
- if (interest&ZOOKEEPER_WRITE) {
- FD_SET(fd, &wfds);
- } else {
- FD_CLR(fd, &wfds);
- }
- } else {
- fd = 0;
- }
- FD_SET(0, &rfds);
- rc = select(fd+1, &rfds, &wfds, &efds, &tv);
- events = 0;
- if (rc > 0) {
- if (FD_ISSET(fd, &rfds)) {
- events |= ZOOKEEPER_READ;
- }
- if (FD_ISSET(fd, &wfds)) {
- events |= ZOOKEEPER_WRITE;
- }
- }
- if(batchMode && processed==0){
- //batch mode
- processline(cmd);
- processed=1;
- }
- if (!processed && FD_ISSET(0, &rfds)) {
- int rc;
- int len = sizeof(buffer) - bufoff -1;
- if (len <= 0) {
- fprintf(stderr, "Can't handle lines that long!\n");
- exit(2);
- }
- rc = read(0, buffer+bufoff, len);
- if (rc <= 0) {
- fprintf(stderr, "bye\n");
- break;
- }
- bufoff += rc;
- buffer[bufoff] = '\0';
- while (strchr(buffer, '\n')) {
- char *ptr = strchr(buffer, '\n');
- *ptr = '\0';
- processline(buffer);
- ptr++;
- memmove(buffer, ptr, strlen(ptr)+1);
- bufoff = 0;
- }
- }
- zookeeper_process(zh, events);
- }
-#endif
- if (to_send!=0)
- fprintf(stderr,"Recvd %d responses for %d requests sent\n",recvd,sent);
- zookeeper_close(zh);
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/hashtable/LICENSE.txt
----------------------------------------------------------------------
diff --git a/src/c/src/hashtable/LICENSE.txt b/src/c/src/hashtable/LICENSE.txt
deleted file mode 100644
index 674a624..0000000
--- a/src/c/src/hashtable/LICENSE.txt
+++ /dev/null
@@ -1,30 +0,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.
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/hashtable/hashtable.c
----------------------------------------------------------------------
diff --git a/src/c/src/hashtable/hashtable.c b/src/c/src/hashtable/hashtable.c
deleted file mode 100644
index caa5f6c..0000000
--- a/src/c/src/hashtable/hashtable.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Copyright (C) 2004 Christopher Clark <fi...@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 Krowne
- http://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, hashvalue);
- 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.
-*/
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/hashtable/hashtable.h
----------------------------------------------------------------------
diff --git a/src/c/src/hashtable/hashtable.h b/src/c/src/hashtable/hashtable.h
deleted file mode 100644
index cbead18..0000000
--- a/src/c/src/hashtable/hashtable.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/* Copyright (C) 2002 Christopher Clark <fi...@cl.cam.ac.uk> */
-
-#ifndef __HASHTABLE_CWC22_H__
-#define __HASHTABLE_CWC22_H__
-#ifdef WIN32
-#include "winconfig.h"
-#endif
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hashtable;
-
-/* Example of use:
- *
- * struct hashtable *h;
- * struct some_key *k;
- * struct some_value *v;
- *
- * static unsigned int hash_from_key_fn( void *k );
- * static int keys_equal_fn ( void *key1, void *key2 );
- *
- * h = create_hashtable(16, hash_from_key_fn, keys_equal_fn);
- * k = (struct some_key *) malloc(sizeof(struct some_key));
- * v = (struct some_value *) malloc(sizeof(struct some_value));
- *
- * (initialise k and v to suitable values)
- *
- * if (! hashtable_insert(h,k,v) )
- * { exit(-1); }
- *
- * if (NULL == (found = hashtable_search(h,k) ))
- * { printf("not found!"); }
- *
- * if (NULL == (found = hashtable_remove(h,k) ))
- * { printf("Not found\n"); }
- *
- */
-
-/* Macros may be used to define type-safe(r) hashtable access functions, with
- * methods specialized to take known key and value types as parameters.
- *
- * Example:
- *
- * Insert this at the start of your file:
- *
- * DEFINE_HASHTABLE_INSERT(insert_some, struct some_key, struct some_value);
- * DEFINE_HASHTABLE_SEARCH(search_some, struct some_key, struct some_value);
- * DEFINE_HASHTABLE_REMOVE(remove_some, struct some_key, struct some_value);
- *
- * This defines the functions 'insert_some', 'search_some' and 'remove_some'.
- * These operate just like hashtable_insert etc., with the same parameters,
- * but their function signatures have 'struct some_key *' rather than
- * 'void *', and hence can generate compile time errors if your program is
- * supplying incorrect data as a key (and similarly for value).
- *
- * Note that the hash and key equality functions passed to create_hashtable
- * still take 'void *' parameters instead of 'some key *'. This shouldn't be
- * a difficult issue as they're only defined and passed once, and the other
- * functions will ensure that only valid keys are supplied to them.
- *
- * The cost for this checking is increased code size and runtime overhead
- * - if performance is important, it may be worth switching back to the
- * unsafe methods once your program has been debugged with the safe methods.
- * This just requires switching to some simple alternative defines - eg:
- * #define insert_some hashtable_insert
- *
- */
-
-/*****************************************************************************
- * create_hashtable
-
- * @name create_hashtable
- * @param minsize minimum initial size of hashtable
- * @param hashfunction function for hashing keys
- * @param key_eq_fn function for determining key equality
- * @return newly created hashtable or NULL on failure
- */
-
-struct hashtable *
-create_hashtable(unsigned int minsize,
- unsigned int (*hashfunction) (void*),
- int (*key_eq_fn) (void*,void*));
-
-/*****************************************************************************
- * hashtable_insert
-
- * @name hashtable_insert
- * @param h the hashtable to insert into
- * @param k the key - hashtable claims ownership and will free on removal
- * @param v the value - does not claim ownership
- * @return non-zero for successful insertion
- *
- * This function will cause the table to expand if the insertion would take
- * the ratio of entries to table size over the maximum load factor.
- *
- * This function does not check for repeated insertions with a duplicate key.
- * The value returned when using a duplicate key is undefined -- when
- * the hashtable changes size, the order of retrieval of duplicate key
- * entries is reversed.
- * If in doubt, remove before insert.
- */
-
-int
-hashtable_insert(struct hashtable *h, void *k, void *v);
-
-#define DEFINE_HASHTABLE_INSERT(fnname, keytype, valuetype) \
-int fnname (struct hashtable *h, keytype *k, valuetype *v) \
-{ \
- return hashtable_insert(h,k,v); \
-}
-
-/*****************************************************************************
- * hashtable_search
-
- * @name hashtable_search
- * @param h the hashtable to search
- * @param k the key to search for - does not claim ownership
- * @return the value associated with the key, or NULL if none found
- */
-
-void *
-hashtable_search(struct hashtable *h, void *k);
-
-#define DEFINE_HASHTABLE_SEARCH(fnname, keytype, valuetype) \
-valuetype * fnname (struct hashtable *h, keytype *k) \
-{ \
- return (valuetype *) (hashtable_search(h,k)); \
-}
-
-/*****************************************************************************
- * hashtable_remove
-
- * @name hashtable_remove
- * @param h the hashtable to remove the item from
- * @param k the key to search for - does not claim ownership
- * @return the value associated with the key, or NULL if none found
- */
-
-void * /* returns value */
-hashtable_remove(struct hashtable *h, void *k);
-
-#define DEFINE_HASHTABLE_REMOVE(fnname, keytype, valuetype) \
-valuetype * fnname (struct hashtable *h, keytype *k) \
-{ \
- return (valuetype *) (hashtable_remove(h,k)); \
-}
-
-
-/*****************************************************************************
- * hashtable_count
-
- * @name hashtable_count
- * @param h the hashtable
- * @return the number of items stored in the hashtable
- */
-unsigned int
-hashtable_count(struct hashtable *h);
-
-
-/*****************************************************************************
- * hashtable_destroy
-
- * @name hashtable_destroy
- * @param h the hashtable
- * @param free_values whether to call 'free' on the remaining values
- */
-
-void
-hashtable_destroy(struct hashtable *h, int free_values);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __HASHTABLE_CWC22_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.
-*/
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/hashtable/hashtable_itr.c
----------------------------------------------------------------------
diff --git a/src/c/src/hashtable/hashtable_itr.c b/src/c/src/hashtable/hashtable_itr.c
deleted file mode 100644
index defac69..0000000
--- a/src/c/src/hashtable/hashtable_itr.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright (C) 2002, 2004 Christopher Clark <fi...@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.
-*/
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/hashtable/hashtable_itr.h
----------------------------------------------------------------------
diff --git a/src/c/src/hashtable/hashtable_itr.h b/src/c/src/hashtable/hashtable_itr.h
deleted file mode 100644
index 30379c7..0000000
--- a/src/c/src/hashtable/hashtable_itr.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (C) 2002, 2004 Christopher Clark <fi...@cl.cam.ac.uk> */
-
-#ifndef __HASHTABLE_ITR_CWC22__
-#define __HASHTABLE_ITR_CWC22__
-#include "hashtable.h"
-#include "hashtable_private.h" /* needed to enable inlining */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*****************************************************************************/
-/* This struct is only concrete here to allow the inlining of two of the
- * accessor functions. */
-struct hashtable_itr
-{
- struct hashtable *h;
- struct entry *e;
- struct entry *parent;
- unsigned int index;
-};
-
-
-/*****************************************************************************/
-/* hashtable_iterator
- */
-
-struct hashtable_itr *
-hashtable_iterator(struct hashtable *h);
-
-/*****************************************************************************/
-/* hashtable_iterator_key
- * - return the value of the (key,value) pair at the current position */
-
-static inline void *
-hashtable_iterator_key(struct hashtable_itr *i)
-{
- return i->e->k;
-}
-
-/*****************************************************************************/
-/* value - return the value of the (key,value) pair at the current position */
-
-static inline void *
-hashtable_iterator_value(struct hashtable_itr *i)
-{
- return i->e->v;
-}
-
-/*****************************************************************************/
-/* advance - advance the iterator to the next element
- * returns zero if advanced to end of table */
-
-int
-hashtable_iterator_advance(struct hashtable_itr *itr);
-
-/*****************************************************************************/
-/* remove - remove current element and advance the iterator to the next element
- * NB: if you need the value to free it, read it before
- * removing. ie: beware memory leaks!
- * returns zero if advanced to end of table */
-
-int
-hashtable_iterator_remove(struct hashtable_itr *itr);
-
-/*****************************************************************************/
-/* search - overwrite the supplied iterator, to point to the entry
- * matching the supplied key.
- h points to the hashtable to be searched.
- * returns zero if not found. */
-int
-hashtable_iterator_search(struct hashtable_itr *itr,
- struct hashtable *h, void *k);
-
-#define DEFINE_HASHTABLE_ITERATOR_SEARCH(fnname, keytype) \
-int fnname (struct hashtable_itr *i, struct hashtable *h, keytype *k) \
-{ \
- return (hashtable_iterator_search(i,h,k)); \
-}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __HASHTABLE_ITR_CWC22__*/
-
-/*
- * 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.
-*/
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/hashtable/hashtable_private.h
----------------------------------------------------------------------
diff --git a/src/c/src/hashtable/hashtable_private.h b/src/c/src/hashtable/hashtable_private.h
deleted file mode 100644
index 3e95f60..0000000
--- a/src/c/src/hashtable/hashtable_private.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright (C) 2002, 2004 Christopher Clark <fi...@cl.cam.ac.uk> */
-
-#ifndef __HASHTABLE_PRIVATE_CWC22_H__
-#define __HASHTABLE_PRIVATE_CWC22_H__
-
-#include "hashtable.h"
-
-/*****************************************************************************/
-struct entry
-{
- void *k, *v;
- unsigned int h;
- struct entry *next;
-};
-
-struct hashtable {
- unsigned int tablelength;
- struct entry **table;
- unsigned int entrycount;
- unsigned int loadlimit;
- unsigned int primeindex;
- unsigned int (*hashfn) (void *k);
- int (*eqfn) (void *k1, void *k2);
-};
-
-/*****************************************************************************/
-unsigned int
-hash(struct hashtable *h, void *k);
-
-/*****************************************************************************/
-/* indexFor */
-static inline unsigned int
-indexFor(unsigned int tablelength, unsigned int hashvalue) {
- return (hashvalue % tablelength);
-};
-
-/* Only works if tablelength == 2^N */
-/*static inline unsigned int
-indexFor(unsigned int tablelength, unsigned int hashvalue)
-{
- return (hashvalue & (tablelength - 1u));
-}
-*/
-
-/*****************************************************************************/
-#define freekey(X) free(X)
-/*define freekey(X) ; */
-
-
-/*****************************************************************************/
-
-#endif /* __HASHTABLE_PRIVATE_CWC22_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.
-*/
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/176bd682/src/c/src/load_gen.c
----------------------------------------------------------------------
diff --git a/src/c/src/load_gen.c b/src/c/src/load_gen.c
deleted file mode 100644
index 886fe1b..0000000
--- a/src/c/src/load_gen.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <zookeeper.h>
-#include "zookeeper_log.h"
-#include <errno.h>
-#ifdef THREADED
-#include <pthread.h>
-#endif
-#include <string.h>
-#include <stdlib.h>
-
-static zhandle_t *zh;
-
-static int shutdownThisThing=0;
-
-// *****************************************************************************
-//
-static pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
-
-static pthread_cond_t counterCond=PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t counterLock=PTHREAD_MUTEX_INITIALIZER;
-static int counter;
-
-
-
-void ensureConnected(){
- pthread_mutex_lock(&lock);
- while (zoo_state(zh)!=ZOO_CONNECTED_STATE) {
- pthread_cond_wait(&cond,&lock);
- }
- pthread_mutex_unlock(&lock);
-}
-
-void incCounter(int delta){
- pthread_mutex_lock(&counterLock);
- counter+=delta;
- pthread_cond_broadcast(&counterCond);
- pthread_mutex_unlock(&counterLock);
-
-}
-void setCounter(int cnt){
- pthread_mutex_lock(&counterLock);
- counter=cnt;
- pthread_cond_broadcast(&counterCond);
- pthread_mutex_unlock(&counterLock);
-
-}
-void waitCounter(){
- pthread_mutex_lock(&counterLock);
- while (counter>0) {
- pthread_cond_wait(&counterCond,&counterLock);
- }
- pthread_mutex_unlock(&counterLock);
-}
-
-void listener(zhandle_t *zzh, int type, int state, const char *path,void* ctx) {
- if (type == ZOO_SESSION_EVENT) {
- if (state == ZOO_CONNECTED_STATE || state == ZOO_READONLY_STATE) {
- pthread_mutex_lock(&lock);
- pthread_cond_broadcast(&cond);
- pthread_mutex_unlock(&lock);
- }
- setCounter(0);
- }
-}
-
-void create_completion(int rc, const char *name, const void *data) {
- incCounter(-1);
- if(rc!=ZOK){
- LOG_ERROR(LOGSTREAM, "Failed to create a node rc=%d",rc);
- }
-}
-
-int doCreateNodes(const char* root, int count){
- char nodeName[1024];
- int i;
- for(i=0; i<count;i++){
- int rc = 0;
- snprintf(nodeName, sizeof(nodeName),"%s/%d",root,i);
- incCounter(1);
- rc=zoo_acreate(zh, nodeName, "first", 5, &ZOO_OPEN_ACL_UNSAFE, 0,
- create_completion, 0);
- if(i%1000==0){
- LOG_INFO(LOGSTREAM, "Created %s", nodeName);
- }
- if(rc!=ZOK) return rc;
- }
- return ZOK;
-}
-
-int createRoot(const char* root){
- char realpath[1024];
- return zoo_create(zh,root,"root",4,&ZOO_OPEN_ACL_UNSAFE,0,realpath,sizeof(realpath)-1);
-}
-
-void write_completion(int rc, const struct Stat *stat, const void *data) {
- incCounter(-1);
- if(rc!=ZOK){
- LOG_ERROR(LOGSTREAM, "Failed to write a node rc=%d",rc);
- }
-}
-
-int doWrites(const char* root, int count){
- char nodeName[1024];
- int i;
- counter=0;
- for(i=0; i<count;i++){
- int rc = 0;
- snprintf(nodeName, sizeof(nodeName),"%s/%d",root,i);
- incCounter(1);
- rc=zoo_aset(zh, nodeName, "second", 6,-1,write_completion, 0);
- if(rc!=ZOK) return rc;
- }
- return ZOK;
-}
-
-void read_completion(int rc, const char *value, int value_len,
- const struct Stat *stat, const void *data) {
- incCounter(-1);
- if(rc!=ZOK){
- LOG_ERROR(LOGSTREAM, "Failed to read a node rc=%d",rc);
- return;
- }
- if(memcmp(value,"second",6)!=0){
- char buf[value_len+1];
- memcpy(buf,value,value_len);buf[value_len]=0;
- LOG_ERROR(LOGSTREAM, "Invalid read, expected [second], received [%s]\n",buf);
- exit(1);
- }
-}
-
-int doReads(const char* root, int count){
- char nodeName[1024];
- int i;
- counter=0;
- for(i=0; i<count;i++){
- int rc = 0;
- snprintf(nodeName, sizeof(nodeName),"%s/%d",root,i);
- incCounter(1);
- rc=zoo_aget(zh, nodeName,0,read_completion, 0);
- if(rc!=ZOK) return rc;
- }
- return ZOK;
-}
-
-void delete_completion(int rc, const void *data) {
- incCounter(-1);
-}
-
-int doDeletes(const char* root, int count){
- char nodeName[1024];
- int i;
- counter=0;
- for(i=0; i<count;i++){
- int rc = 0;
- snprintf(nodeName, sizeof(nodeName),"%s/%d",root,i);
- incCounter(1);
- rc=zoo_adelete(zh, nodeName,-1,delete_completion, 0);
- if(rc!=ZOK) return rc;
- }
- return ZOK;
-}
-
-static int free_String_vector(struct String_vector *v) {
- if (v->data) {
- int32_t i;
- for(i=0;i<v->count; i++) {
- free(v->data[i]);
- }
- free(v->data);
- v->data = 0;
- }
- return 0;
-}
-
-static int deletedCounter;
-
-int recursiveDelete(const char* root){
- struct String_vector children;
- int i;
- int rc=zoo_get_children(zh,root,0,&children);
- if(rc!=ZNONODE){
- if(rc!=ZOK){
- LOG_ERROR(LOGSTREAM, "Failed to get children of %s, rc=%d",root,rc);
- return rc;
- }
- for(i=0;i<children.count; i++){
- int rc = 0;
- char nodeName[2048];
- snprintf(nodeName, sizeof(nodeName),"%s/%s",root,children.data[i]);
- rc=recursiveDelete(nodeName);
- if(rc!=ZOK){
- free_String_vector(&children);
- return rc;
- }
- }
- free_String_vector(&children);
- }
- if(deletedCounter%1000==0)
- LOG_INFO(LOGSTREAM, "Deleting %s",root);
- rc=zoo_delete(zh,root,-1);
- if(rc!=ZOK){
- LOG_ERROR(LOGSTREAM, "Failed to delete znode %s, rc=%d",root,rc);
- }else
- deletedCounter++;
- return rc;
-}
-
-void usage(char *argv[]){
- fprintf(stderr, "USAGE:\t%s zookeeper_host_list path #children\nor", argv[0]);
- fprintf(stderr, "\t%s zookeeper_host_list path clean\n", argv[0]);
- exit(0);
-}
-
-int main(int argc, char **argv) {
- int nodeCount;
- int cleaning=0;
- if (argc < 4) {
- usage(argv);
- }
- if(strcmp("clean",argv[3])==0){
- cleaning=1;
- }
- zoo_set_debug_level(ZOO_LOG_LEVEL_INFO);
- zoo_deterministic_conn_order(1); // enable deterministic order
-
- zh = zookeeper_init(argv[1], listener, 10000, 0, 0, 0);
- if (!zh)
- return errno;
-
- LOG_INFO(LOGSTREAM, "Checking server connection...");
- ensureConnected();
- if(cleaning==1){
- int rc = 0;
- deletedCounter=0;
- rc=recursiveDelete(argv[2]);
- if(rc==ZOK){
- LOG_INFO(LOGSTREAM, "Successfully deleted a subtree starting at %s (%d nodes)",
- argv[2],deletedCounter);
- exit(0);
- }
- exit(1);
- }
- nodeCount=atoi(argv[3]);
- createRoot(argv[2]);
- while(1) {
- ensureConnected();
- LOG_INFO(LOGSTREAM, "Creating children for path %s",argv[2]);
- doCreateNodes(argv[2],nodeCount);
- waitCounter();
-
- LOG_INFO(LOGSTREAM, "Starting the write cycle for path %s",argv[2]);
- doWrites(argv[2],nodeCount);
- waitCounter();
- LOG_INFO(LOGSTREAM, "Starting the read cycle for path %s",argv[2]);
- doReads(argv[2],nodeCount);
- waitCounter();
-
- LOG_INFO(LOGSTREAM, "Starting the delete cycle for path %s",argv[2]);
- doDeletes(argv[2],nodeCount);
- waitCounter();
- }
- zookeeper_close(zh);
- return 0;
-}