Remove memlog and rdtsc
Neither of these were actively used, so they and any associated tests were removed.
This commit is contained in:
parent
8d07604436
commit
74225daf46
@ -16,14 +16,12 @@ check_include_files(ftw.h HAVE_FTW)
|
||||
check_include_files(getopt.h HAVE_GETOPT)
|
||||
check_include_files(ini.h HAVE_INI)
|
||||
check_include_files(math.h HAVE_MATH)
|
||||
check_include_files(memlog.h HAVE_MEMLOG)
|
||||
check_include_files(netdb.h HAVE_NETDB)
|
||||
check_include_files(netinet/in.h HAVE_NETINET_IN)
|
||||
check_include_files(openssl/aes.h HAVE_OPENSSL_AES)
|
||||
check_include_files(openssl/sha.h HAVE_OPENSSL_SHA)
|
||||
check_include_files(pthread.h HAVE_PTHREAD)
|
||||
check_include_files(pwd.h HAVE_PWD)
|
||||
check_include_files(rdtsc.h HAVE_RDTSC)
|
||||
check_include_files(regex.h HAVE_REGEX)
|
||||
check_include_files(signal.h HAVE_SIGNAL)
|
||||
check_include_files(stdarg.h HAVE_STDARG)
|
||||
|
@ -1,65 +0,0 @@
|
||||
#pragma once
|
||||
/*
|
||||
* Copyright (c) 2016 MariaDB Corporation Ab
|
||||
*
|
||||
* Use of this software is governed by the Business Source License included
|
||||
* in the LICENSE.TXT file and at www.mariadb.com/bsl.
|
||||
*
|
||||
* Change Date: 2019-07-01
|
||||
*
|
||||
* On the date above, in accordance with the Business Source License, use
|
||||
* of this software will be governed by version 2 or later of the General
|
||||
* Public License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file memlog.h The memory logging mechanism
|
||||
*
|
||||
* @verbatim
|
||||
* Revision History
|
||||
*
|
||||
* Date Who Description
|
||||
* 26/09/14 Mark Riddoch Initial implementation
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
|
||||
#include <maxscale/cdefs.h>
|
||||
#include <maxscale/spinlock.h>
|
||||
|
||||
MXS_BEGIN_DECLS
|
||||
|
||||
typedef enum { ML_INT, ML_LONG, ML_LONGLONG, ML_STRING } MEMLOGTYPE;
|
||||
|
||||
typedef struct memlog
|
||||
{
|
||||
char *name;
|
||||
SPINLOCK lock;
|
||||
void *values;
|
||||
int offset;
|
||||
int size;
|
||||
MEMLOGTYPE type;
|
||||
unsigned int flags;
|
||||
unsigned int iflags;
|
||||
struct memlog *next;
|
||||
} MEMLOG;
|
||||
|
||||
/*
|
||||
* MEMLOG flag bits
|
||||
*/
|
||||
#define MLNOAUTOFLUSH 0x0001
|
||||
|
||||
/*
|
||||
* MEMLOG internal flags
|
||||
*/
|
||||
#define MLWRAPPED 0x0001
|
||||
|
||||
|
||||
extern MEMLOG *memlog_create(char *, MEMLOGTYPE, int);
|
||||
extern void memlog_destroy(MEMLOG *);
|
||||
extern void memlog_set(MEMLOG *, unsigned int);
|
||||
extern void memlog_log(MEMLOG *, void *);
|
||||
extern void memlog_flush_all();
|
||||
extern void memlog_flush(MEMLOG *);
|
||||
|
||||
MXS_END_DECLS
|
@ -1,60 +0,0 @@
|
||||
#pragma once
|
||||
/*
|
||||
* Copyright (c) 2016 MariaDB Corporation Ab
|
||||
*
|
||||
* Use of this software is governed by the Business Source License included
|
||||
* in the LICENSE.TXT file and at www.mariadb.com/bsl.
|
||||
*
|
||||
* Change Date: 2019-07-01
|
||||
*
|
||||
* On the date above, in accordance with the Business Source License, use
|
||||
* of this software will be governed by version 2 or later of the General
|
||||
* Public License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file rdtsc.h Access the process time-stamp counter
|
||||
*
|
||||
* This is an Intel only facilty that is used to access an accurate time
|
||||
* value, the granularity of which is related to the processor clock speed
|
||||
* and the overhead for access is much lower than using any system call
|
||||
* mechanism.
|
||||
*
|
||||
*
|
||||
* @verbatim
|
||||
* Revision History
|
||||
*
|
||||
* Date Who Description
|
||||
* 19/09/2014 Mark Riddoch Initial implementation
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
|
||||
#include <maxscale/cdefs.h>
|
||||
|
||||
MXS_BEGIN_DECLS
|
||||
|
||||
typedef unsigned long long CYCLES;
|
||||
|
||||
/**
|
||||
* Get the current time-stamp counter value from the processor. This is the
|
||||
* count of CPU cyceles as a 64 bit value.
|
||||
*
|
||||
* The value returned is related to the clock speed, to obtian a value in
|
||||
* seconds divide the returned value by the clock frequency for the processor.
|
||||
*
|
||||
* Note, on multi-processsor systems care much be taken to avoid the thread
|
||||
* moving to a different processor when taken succsive value of RDTSC to
|
||||
* obtian accurate timing. This may be done by setting pocessor affinity for
|
||||
* the thread. See sched_setaffinity/sched_getaffinity.
|
||||
*
|
||||
* @return CPU cycle count
|
||||
*/
|
||||
static __inline__ CYCLES rdtsc(void)
|
||||
{
|
||||
unsigned long long int x;
|
||||
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
|
||||
return x;
|
||||
}
|
||||
|
||||
MXS_END_DECLS
|
@ -1,4 +1,4 @@
|
||||
add_library(maxscale-common SHARED adminusers.c alloc.c authenticator.c atomic.c buffer.c config.c config_runtime.c dcb.c filter.c filter.cc externcmd.c paths.c hashtable.c hint.c housekeeper.c load_utils.c log_manager.cc maxscale_pcre2.c memlog.c misc.c mlist.c modutil.c monitor.c queuemanager.c query_classifier.c poll.c random_jkiss.c resultset.c secrets.c server.c service.c session.c spinlock.c thread.c users.c utils.c skygw_utils.cc statistics.c listener.c ssl.c mysql_utils.c mysql_binlog.c modulecmd.c )
|
||||
add_library(maxscale-common SHARED adminusers.c alloc.c authenticator.c atomic.c buffer.c config.c config_runtime.c dcb.c filter.c filter.cc externcmd.c paths.c hashtable.c hint.c housekeeper.c load_utils.c log_manager.cc maxscale_pcre2.c misc.c mlist.c modutil.c monitor.c queuemanager.c query_classifier.c poll.c random_jkiss.c resultset.c secrets.c server.c service.c session.c spinlock.c thread.c users.c utils.c skygw_utils.cc statistics.c listener.c ssl.c mysql_utils.c mysql_binlog.c modulecmd.c )
|
||||
|
||||
target_link_libraries(maxscale-common ${MARIADB_CONNECTOR_LIBRARIES} ${LZMA_LINK_FLAGS} ${PCRE2_LIBRARIES} ${CURL_LIBRARIES} ssl pthread crypt dl crypto inih z rt m stdc++)
|
||||
|
||||
|
@ -60,7 +60,6 @@
|
||||
#include <maxscale/housekeeper.h>
|
||||
#include <maxscale/log_manager.h>
|
||||
#include <maxscale/maxscale.h>
|
||||
#include <maxscale/memlog.h>
|
||||
#include <maxscale/paths.h>
|
||||
#include <maxscale/query_classifier.h>
|
||||
#include <maxscale/server.h>
|
||||
@ -2049,7 +2048,6 @@ int maxscale_shutdown()
|
||||
service_shutdown();
|
||||
poll_shutdown();
|
||||
hkshutdown();
|
||||
memlog_flush_all();
|
||||
log_flush_shutdown();
|
||||
}
|
||||
|
||||
|
@ -1,273 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016 MariaDB Corporation Ab
|
||||
*
|
||||
* Use of this software is governed by the Business Source License included
|
||||
* in the LICENSE.TXT file and at www.mariadb.com/bsl.
|
||||
*
|
||||
* Change Date: 2019-07-01
|
||||
*
|
||||
* On the date above, in accordance with the Business Source License, use
|
||||
* of this software will be governed by version 2 or later of the General
|
||||
* Public License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file memlog.c - Implementation of memory logging mechanism for debug purposes
|
||||
*
|
||||
* @verbatim
|
||||
* Revision History
|
||||
*
|
||||
* Date Who Description
|
||||
* 26/09/14 Mark Riddoch Initial implementation
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
#include <maxscale/memlog.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <maxscale/alloc.h>
|
||||
#include <maxscale/log_manager.h>
|
||||
|
||||
static MEMLOG *memlogs = NULL;
|
||||
static SPINLOCK memlock = SPINLOCK_INIT;
|
||||
|
||||
/**
|
||||
* Create a new instance of a memory logger.
|
||||
*
|
||||
* @param name The name of the memory log
|
||||
* @param type The type of item being logged
|
||||
* @param size The number of items to store in memory before flushign to disk
|
||||
*
|
||||
* @return MEMLOG* A memory log handle
|
||||
*/
|
||||
MEMLOG *
|
||||
memlog_create(char *name, MEMLOGTYPE type, int size)
|
||||
{
|
||||
name = MXS_STRDUP(name);
|
||||
|
||||
MEMLOG *log = (MEMLOG *)MXS_MALLOC(sizeof(MEMLOG));
|
||||
|
||||
if (!name || !log)
|
||||
{
|
||||
MXS_FREE(name);
|
||||
MXS_FREE(log);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
log->name = name;
|
||||
spinlock_init(&log->lock);
|
||||
log->type = type;
|
||||
log->offset = 0;
|
||||
log->size = size;
|
||||
log->flags = 0;
|
||||
switch (type)
|
||||
{
|
||||
case ML_INT:
|
||||
log->values = MXS_MALLOC(sizeof(int) * size);
|
||||
break;
|
||||
case ML_LONG:
|
||||
log->values = MXS_MALLOC(sizeof(long) * size);
|
||||
break;
|
||||
case ML_LONGLONG:
|
||||
log->values = MXS_MALLOC(sizeof(long long) * size);
|
||||
break;
|
||||
case ML_STRING:
|
||||
log->values = MXS_MALLOC(sizeof(char *) * size);
|
||||
break;
|
||||
}
|
||||
if (log->values == NULL)
|
||||
{
|
||||
MXS_FREE(name);
|
||||
MXS_FREE(log);
|
||||
return NULL;
|
||||
}
|
||||
spinlock_acquire(&memlock);
|
||||
log->next = memlogs;
|
||||
memlogs = log;
|
||||
spinlock_release(&memlock);
|
||||
|
||||
return log;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a memory logger any unwritten data will be flushed to disk
|
||||
*
|
||||
* @param log The memory log to destroy
|
||||
*/
|
||||
void
|
||||
memlog_destroy(MEMLOG *log)
|
||||
{
|
||||
MEMLOG *ptr;
|
||||
|
||||
if ((log->flags & MLNOAUTOFLUSH) == 0)
|
||||
{
|
||||
memlog_flush(log);
|
||||
}
|
||||
MXS_FREE(log->values);
|
||||
|
||||
spinlock_acquire(&memlock);
|
||||
if (memlogs == log)
|
||||
{
|
||||
memlogs = log->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = memlogs;
|
||||
while (ptr && ptr->next != log)
|
||||
{
|
||||
ptr = ptr->next;
|
||||
}
|
||||
if (ptr)
|
||||
{
|
||||
ptr->next = log->next;
|
||||
}
|
||||
}
|
||||
spinlock_release(&memlock);
|
||||
MXS_FREE(log->name);
|
||||
MXS_FREE(log);
|
||||
}
|
||||
|
||||
/**
|
||||
* Log a data item to the memory logger
|
||||
*
|
||||
* @param log The memory logger
|
||||
* @param value The value to log
|
||||
*/
|
||||
void
|
||||
memlog_log(MEMLOG *log, void *value)
|
||||
{
|
||||
if (!log)
|
||||
{
|
||||
return;
|
||||
}
|
||||
spinlock_acquire(&log->lock);
|
||||
switch (log->type)
|
||||
{
|
||||
case ML_INT:
|
||||
((int *)(log->values))[log->offset] = (intptr_t)value;
|
||||
break;
|
||||
case ML_LONG:
|
||||
((long *)(log->values))[log->offset] = (long)value;
|
||||
break;
|
||||
case ML_LONGLONG:
|
||||
((long long *)(log->values))[log->offset] = (long long)value;
|
||||
break;
|
||||
case ML_STRING:
|
||||
((char **)(log->values))[log->offset] = (char *)value;
|
||||
break;
|
||||
}
|
||||
log->offset++;
|
||||
if (log->offset == log->size)
|
||||
{
|
||||
if ((log->flags & MLNOAUTOFLUSH) == 0)
|
||||
{
|
||||
memlog_flush(log);
|
||||
}
|
||||
log->offset = 0;
|
||||
log->iflags = MLWRAPPED;
|
||||
}
|
||||
spinlock_release(&log->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush all memlogs to disk, called during shutdown
|
||||
*
|
||||
*/
|
||||
void
|
||||
memlog_flush_all()
|
||||
{
|
||||
MEMLOG *log;
|
||||
|
||||
spinlock_acquire(&memlock);
|
||||
log = memlogs;
|
||||
while (log)
|
||||
{
|
||||
spinlock_acquire(&log->lock);
|
||||
memlog_flush(log);
|
||||
spinlock_release(&log->lock);
|
||||
log = log->next;
|
||||
}
|
||||
spinlock_release(&memlock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the flags for a memlog
|
||||
*
|
||||
* @param log The memlog to set the flags for
|
||||
* @param flags The new flags values
|
||||
*/
|
||||
void
|
||||
memlog_set(MEMLOG *log, unsigned int flags)
|
||||
{
|
||||
log->flags = flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush a memory log to disk
|
||||
*
|
||||
* Assumes the the log->lock has been acquired by the caller
|
||||
*
|
||||
* @param log The memory log to flush
|
||||
*/
|
||||
void
|
||||
memlog_flush(MEMLOG *log)
|
||||
{
|
||||
FILE *fp;
|
||||
int i;
|
||||
|
||||
if ((fp = fopen(log->name, "a")) == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ((log->flags & MLNOAUTOFLUSH) && (log->iflags & MLWRAPPED))
|
||||
{
|
||||
for (i = 0; i < log->size; i++)
|
||||
{
|
||||
int ind = (i + log->offset) % log->size;
|
||||
switch (log->type)
|
||||
{
|
||||
case ML_INT:
|
||||
fprintf(fp, "%d\n",
|
||||
((int *)(log->values))[ind]);
|
||||
break;
|
||||
case ML_LONG:
|
||||
fprintf(fp, "%ld\n",
|
||||
((long *)(log->values))[ind]);
|
||||
break;
|
||||
case ML_LONGLONG:
|
||||
fprintf(fp, "%lld\n",
|
||||
((long long *)(log->values))[ind]);
|
||||
break;
|
||||
case ML_STRING:
|
||||
fprintf(fp, "%s\n",
|
||||
((char **)(log->values))[ind]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < log->offset; i++)
|
||||
{
|
||||
switch (log->type)
|
||||
{
|
||||
case ML_INT:
|
||||
fprintf(fp, "%d\n", ((int *)(log->values))[i]);
|
||||
break;
|
||||
case ML_LONG:
|
||||
fprintf(fp, "%ld\n", ((long *)(log->values))[i]);
|
||||
break;
|
||||
case ML_LONGLONG:
|
||||
fprintf(fp, "%lld\n", ((long long *)(log->values))[i]);
|
||||
break;
|
||||
case ML_STRING:
|
||||
fprintf(fp, "%s\n", ((char **)(log->values))[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
log->offset = 0;
|
||||
fclose(fp);
|
||||
}
|
@ -44,11 +44,7 @@
|
||||
#define PROFILE_POLL 0
|
||||
|
||||
#if PROFILE_POLL
|
||||
#include <rdtsc.h>
|
||||
#include <memlog.h>
|
||||
|
||||
extern unsigned long hkheartbeat;
|
||||
MEMLOG *plog;
|
||||
#endif
|
||||
|
||||
int number_poll_spins;
|
||||
@ -320,10 +316,6 @@ poll_init()
|
||||
|
||||
number_poll_spins = config_nbpolls();
|
||||
max_poll_sleep = config_pollsleep();
|
||||
|
||||
#if PROFILE_POLL
|
||||
plog = memlog_create("EventQueueWaitTime", ML_LONG, 10000);
|
||||
#endif
|
||||
}
|
||||
|
||||
int poll_add_dcb(DCB *dcb)
|
||||
@ -909,9 +901,6 @@ process_pollq(int thread_id, struct epoll_event *event)
|
||||
uint32_t ev = event->events;
|
||||
DCB *dcb = event->data.ptr;
|
||||
ss_dassert(dcb->thread.id == thread_id || dcb->dcb_role == DCB_ROLE_SERVICE_LISTENER);
|
||||
#if PROFILE_POLL
|
||||
memlog_log(plog, hkheartbeat - dcb->evq.inserted);
|
||||
#endif
|
||||
|
||||
/** Calculate event queue statistics */
|
||||
uint64_t started = hkheartbeat;
|
||||
|
@ -16,7 +16,6 @@ add_executable(test_spinlock testspinlock.c)
|
||||
add_executable(test_users testusers.c)
|
||||
add_executable(testfeedback testfeedback.c)
|
||||
add_executable(testmaxscalepcre2 testmaxscalepcre2.c)
|
||||
add_executable(testmemlog testmemlog.c)
|
||||
add_executable(testmodulecmd testmodulecmd.c)
|
||||
add_executable(testconfig testconfig.c)
|
||||
target_link_libraries(test_adminusers maxscale-common)
|
||||
@ -37,7 +36,6 @@ target_link_libraries(test_spinlock maxscale-common)
|
||||
target_link_libraries(test_users maxscale-common)
|
||||
target_link_libraries(testfeedback maxscale-common)
|
||||
target_link_libraries(testmaxscalepcre2 maxscale-common)
|
||||
target_link_libraries(testmemlog maxscale-common)
|
||||
target_link_libraries(testmodulecmd maxscale-common)
|
||||
target_link_libraries(testconfig maxscale-common)
|
||||
add_test(TestAdminUsers test_adminusers)
|
||||
@ -50,7 +48,6 @@ add_test(TestLog test_log)
|
||||
add_test(NAME TestLogOrder COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/logorder.sh 200 0 1000 ${CMAKE_CURRENT_BINARY_DIR}/logorder.log)
|
||||
add_test(TestLogThrottling test_logthrottling)
|
||||
add_test(TestMaxScalePCRE2 testmaxscalepcre2)
|
||||
add_test(TestMemlog testmemlog)
|
||||
add_test(TestModutil test_modutil)
|
||||
add_test(NAME TestMaxPasswd COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testmaxpasswd.sh)
|
||||
add_test(TestPoll test_poll)
|
||||
|
@ -1,503 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016 MariaDB Corporation Ab
|
||||
*
|
||||
* Use of this software is governed by the Business Source License included
|
||||
* in the LICENSE.TXT file and at www.mariadb.com/bsl.
|
||||
*
|
||||
* Change Date: 2019-07-01
|
||||
*
|
||||
* On the date above, in accordance with the Business Source License, use
|
||||
* of this software will be governed by version 2 or later of the General
|
||||
* Public License.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @verbatim
|
||||
* Revision History
|
||||
*
|
||||
* Date Who Description
|
||||
* 30/09/2014 Mark Riddoch Initial implementation
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
|
||||
// To ensure that ss_info_assert asserts also when builing in non-debug mode.
|
||||
#if !defined(SS_DEBUG)
|
||||
#define SS_DEBUG
|
||||
#endif
|
||||
#if defined(NDEBUG)
|
||||
#undef NDEBUG
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <maxscale/memlog.h>
|
||||
|
||||
/**
|
||||
* Count the number of lines in a file
|
||||
*
|
||||
* @param file The name of the file
|
||||
* @return -1 if the file could not be opened or the numebr of lines
|
||||
*/
|
||||
int
|
||||
linecount(char *file)
|
||||
{
|
||||
FILE *fp;
|
||||
int i = 0;
|
||||
char buffer[180];
|
||||
|
||||
if ((fp = fopen(file, "r")) == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
while (fgets(buffer, 180, fp) != NULL)
|
||||
{
|
||||
i++;
|
||||
}
|
||||
fclose(fp);
|
||||
return i;
|
||||
}
|
||||
|
||||
/* Some strings to log */
|
||||
char *strings[] =
|
||||
{
|
||||
"First log entry",
|
||||
"Second entry",
|
||||
"Third",
|
||||
"The fourth thing to log",
|
||||
"Add a final 5th item"
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
MEMLOG *log, *log2;
|
||||
long int i;
|
||||
long j;
|
||||
long long k;
|
||||
int failures = 0;
|
||||
|
||||
unlink("memlog1");
|
||||
if ((log = memlog_create("memlog1", ML_INT, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
if (access("memlog1", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 1: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 1: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
if (access("memlog1", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 2: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 2: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
if (access("memlog1", R_OK) != 0)
|
||||
{
|
||||
printf("File existance 3: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 3: Passed\n");
|
||||
}
|
||||
if (linecount("memlog1") != 100)
|
||||
{
|
||||
printf("Incorrect entry count: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Incorrect entry count: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
if (linecount("memlog1") != 100)
|
||||
{
|
||||
printf("Premature Flushing: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Premature Flushing: Passed\n");
|
||||
}
|
||||
memlog_destroy(log);
|
||||
if (linecount("memlog1") != 150)
|
||||
{
|
||||
printf("Flush on destroy: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Flush on destroy: Passed\n");
|
||||
}
|
||||
}
|
||||
|
||||
unlink("memlog2");
|
||||
if ((log = memlog_create("memlog2", ML_LONG, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
if (access("memlog2", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 1: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 1: Passed\n");
|
||||
}
|
||||
for (j = 0; j < 50; j++)
|
||||
{
|
||||
memlog_log(log, (void *)j);
|
||||
}
|
||||
if (access("memlog2", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 2: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 2: Passed\n");
|
||||
}
|
||||
for (j = 0; j < 50; j++)
|
||||
{
|
||||
memlog_log(log, (void *)j);
|
||||
}
|
||||
if (access("memlog2", R_OK) != 0)
|
||||
{
|
||||
printf("File existance 3: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 3: Passed\n");
|
||||
}
|
||||
if (linecount("memlog2") != 100)
|
||||
{
|
||||
printf("Incorrect entry count: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Incorrect entry count: Passed\n");
|
||||
}
|
||||
for (j = 0; j < 50; j++)
|
||||
{
|
||||
memlog_log(log, (void *)j);
|
||||
}
|
||||
if (linecount("memlog2") != 100)
|
||||
{
|
||||
printf("Premature Flushing: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Premature Flushing: Passed\n");
|
||||
}
|
||||
memlog_destroy(log);
|
||||
if (linecount("memlog2") != 150)
|
||||
{
|
||||
printf("Flush on destroy: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Flush on destroy: Passed\n");
|
||||
}
|
||||
}
|
||||
|
||||
unlink("memlog3");
|
||||
if ((log = memlog_create("memlog3", ML_LONGLONG, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
if (access("memlog3", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 1: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 1: Passed\n");
|
||||
}
|
||||
for (k = 0; k < 50; k++)
|
||||
{
|
||||
memlog_log(log, (void *)k);
|
||||
}
|
||||
if (access("memlog3", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 2: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 2: Passed\n");
|
||||
}
|
||||
for (k = 0; k < 50; k++)
|
||||
{
|
||||
memlog_log(log, (void *)k);
|
||||
}
|
||||
if (access("memlog3", R_OK) != 0)
|
||||
{
|
||||
printf("File existance 3: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 3: Passed\n");
|
||||
}
|
||||
if (linecount("memlog3") != 100)
|
||||
{
|
||||
printf("Incorrect entry count: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Incorrect entry count: Passed\n");
|
||||
}
|
||||
for (k = 0; k < 50; k++)
|
||||
{
|
||||
memlog_log(log, (void *)k);
|
||||
}
|
||||
if (linecount("memlog3") != 100)
|
||||
{
|
||||
printf("Premature Flushing: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Premature Flushing: Passed\n");
|
||||
}
|
||||
memlog_destroy(log);
|
||||
if (linecount("memlog3") != 150)
|
||||
{
|
||||
printf("Flush on destroy: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Flush on destroy: Passed\n");
|
||||
}
|
||||
}
|
||||
|
||||
unlink("memlog4");
|
||||
if ((log = memlog_create("memlog4", ML_STRING, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
if (access("memlog4", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 1: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 1: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, strings[i % 5]);
|
||||
}
|
||||
if (access("memlog4", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 2: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 2: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, strings[i % 5]);
|
||||
}
|
||||
if (access("memlog4", R_OK) != 0)
|
||||
{
|
||||
printf("File existance 3: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 3: Passed\n");
|
||||
}
|
||||
if (linecount("memlog4") != 100)
|
||||
{
|
||||
printf("Incorrect entry count: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Incorrect entry count: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, strings[i % 5]);
|
||||
}
|
||||
if (linecount("memlog4") != 100)
|
||||
{
|
||||
printf("Premature Flushing: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Premature Flushing: Passed\n");
|
||||
}
|
||||
memlog_destroy(log);
|
||||
if (linecount("memlog4") != 150)
|
||||
{
|
||||
printf("Flush on destroy: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Flush on destroy: Passed\n");
|
||||
}
|
||||
}
|
||||
|
||||
unlink("memlog5");
|
||||
unlink("memlog6");
|
||||
if ((log = memlog_create("memlog5", ML_INT, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
if ((log2 = memlog_create("memlog6", ML_INT, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
for (i = 0; i < 40; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
for (i = 0; i < 30; i++)
|
||||
{
|
||||
memlog_log(log2, (void *)i);
|
||||
}
|
||||
memlog_flush_all();
|
||||
if (linecount("memlog5") != 40 ||
|
||||
linecount("memlog6") != 30)
|
||||
{
|
||||
printf(
|
||||
"Memlog flush all: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
printf(
|
||||
"Memlog flush all: Passed\n");
|
||||
}
|
||||
}
|
||||
|
||||
unlink("memlog7");
|
||||
if ((log = memlog_create("memlog7", ML_INT, 100)) == NULL)
|
||||
{
|
||||
printf("Memlog Creation: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Memlog Creation: Passed\n");
|
||||
if (access("memlog7", R_OK) == 0)
|
||||
{
|
||||
printf("File existance 1: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 1: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 5050; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
if (access("memlog7", R_OK) != 0)
|
||||
{
|
||||
printf("File existance 3: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("File existance 3: Passed\n");
|
||||
}
|
||||
if (linecount("memlog7") != 5000)
|
||||
{
|
||||
printf("Incorrect entry count: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Incorrect entry count: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 50; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
if (linecount("memlog7") != 5100)
|
||||
{
|
||||
printf("Residual flushing: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Premature Flushing: Passed\n");
|
||||
}
|
||||
for (i = 0; i < 10120; i++)
|
||||
{
|
||||
memlog_log(log, (void *)i);
|
||||
}
|
||||
memlog_destroy(log);
|
||||
if (linecount("memlog7") != 15220)
|
||||
{
|
||||
printf("Flush on destroy: Failed\n");
|
||||
failures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Flush on destroy: Passed\n");
|
||||
}
|
||||
}
|
||||
exit(failures);
|
||||
}
|
@ -50,7 +50,6 @@
|
||||
#include <maxscale/buffer.h>
|
||||
#include <pthread.h>
|
||||
#include <stdint.h>
|
||||
#include <maxscale/memlog.h>
|
||||
#include <maxscale/thread.h>
|
||||
#include <zlib.h>
|
||||
#include <maxscale/protocol/mysql.h>
|
||||
|
@ -76,7 +76,6 @@
|
||||
|
||||
#include <maxscale/log_manager.h>
|
||||
|
||||
#include <maxscale/rdtsc.h>
|
||||
#include <maxscale/thread.h>
|
||||
|
||||
/* Temporary requirement for auth data */
|
||||
|
Loading…
x
Reference in New Issue
Block a user