/*
- * $Id: store.cc,v 1.68 1996/07/15 23:16:32 wessels Exp $
+ * $Id: store.cc,v 1.69 1996/07/17 17:10:00 wessels Exp $
*
* DEBUG: section 20 Storeage Manager
* AUTHOR: Harvest Derived
strlen(logmsg),
0,
NULL,
- NULL);
+ NULL,
+ xfree);
}
if (len) {
debug(20, 5, "storeAppend: appending %d bytes for '%s'\n", len, e->key);
-
- /* get some extra storage if needed */
(void) storeGetMemSpace(len, 0);
store_mem_size += len;
- debug(20, 8, "storeAppend: growing store_mem_size by %d\n", len);
- debug(20, 8, "storeAppend: store_mem_size = %d\n", store_mem_size);
-
- (void) e->mem_obj->data->mem_append(e->mem_obj->data,
- data, len);
+ (void) e->mem_obj->data->mem_append(e->mem_obj->data, data, len);
e->mem_obj->e_current_len += len;
- debug(20, 8, "storeAppend: e_current_len = %d\n",
- e->mem_obj->e_current_len);
}
- if ((e->store_status != STORE_ABORTED) && !(e->flag & DELAY_SENDING))
+ if (e->store_status != STORE_ABORTED && !(e->flag & DELAY_SENDING))
InvokeHandlers(e);
}
debug(20, 0, "storeSwapInHandle: SwapIn failure (err code = %d).\n", flag);
put_free_8k_page(mem->e_swap_buf);
storeSetMemStatus(e, NOT_IN_MEMORY);
- file_close(mem->swap_fd);
+ file_close(mem->swapin_fd);
swapInError(-1, e); /* Invokes storeAbort() and completes the I/O */
if (mem->swapin_complete_handler) {
(*mem->swapin_complete_handler) (2, mem->swapin_complete_data);
if (mem->e_current_len < e->object_len && flag != DISK_EOF) {
/* some more data to swap in, reschedule */
- file_read(mem->swap_fd,
+ file_read(mem->swapin_fd,
mem->e_swap_buf,
SWAP_BUF,
mem->swap_offset,
/* complete swapping in */
storeSetMemStatus(e, IN_MEMORY);
put_free_8k_page(mem->e_swap_buf);
- file_close(mem->swap_fd);
+ file_close(mem->swapin_fd);
storeLog(STORE_LOG_SWAPIN, e);
debug(20, 5, "storeSwapInHandle: SwapIn complete: <URL:%s> from %s.\n",
e->url, storeSwapFullPath(e->swap_file_number, NULL));
{
int fd;
char *path = NULL;
+ MemObject *mem = NULL;
/* sanity check! */
if ((e->swap_status != SWAP_OK) || (e->swap_file_number < 0)) {
debug(20, 0, "storeSwapInStart: <No filename:%d> ? <URL:%s>\n",
e->swap_file_number, e->url);
if (e->mem_obj)
- e->mem_obj->swap_fd = -1;
+ e->mem_obj->swapin_fd = -1;
return -1;
}
/* create additional structure for object in memory */
- e->mem_obj = new_MemObject();
+ e->mem_obj = mem = new_MemObject();
path = storeSwapFullPath(e->swap_file_number, NULL);
if ((fd = file_open(path, NULL, O_RDONLY)) < 0) {
/* Invoke a store abort that should free the memory object */
return -1;
}
- e->mem_obj->swap_fd = (short) fd;
+ mem->swapin_fd = (short) fd;
debug(20, 5, "storeSwapInStart: initialized swap file '%s' for <URL:%s>\n",
path, e->url);
storeSetMemStatus(e, SWAPPING_IN);
- e->mem_obj->data = new_MemObjectData();
- e->mem_obj->swap_offset = 0;
- e->mem_obj->e_swap_buf = get_free_8k_page();
+ mem->data = new_MemObjectData();
+ mem->swap_offset = 0;
+ mem->e_swap_buf = get_free_8k_page();
/* start swapping daemon */
file_read(fd,
- e->mem_obj->e_swap_buf,
+ mem->e_swap_buf,
SWAP_BUF,
- e->mem_obj->swap_offset,
+ mem->swap_offset,
(FILE_READ_HD) storeSwapInHandle,
(void *) e);
- e->mem_obj->swapin_complete_handler = swapin_complete_handler;
- e->mem_obj->swapin_complete_data = swapin_complete_data;
+ mem->swapin_complete_handler = swapin_complete_handler;
+ mem->swapin_complete_data = swapin_complete_data;
return 0;
}
StoreEntry *e;
{
static char filename[MAX_FILE_NAME_LEN];
- char *page_ptr = NULL;
+ MemObject *mem = e->mem_obj;
debug(20, 3, "storeSwapOutHandle: '%s'\n", e->key);
e->timestamp = squid_curtime;
storeSwapFullPath(e->swap_file_number, filename);
- page_ptr = e->mem_obj->e_swap_buf;
if (flag < 0) {
debug(20, 1, "storeSwapOutHandle: SwapOut failure (err code = %d).\n",
flag);
e->swap_status = NO_SWAP;
- put_free_8k_page(page_ptr);
+ put_free_8k_page(mem->e_swap_buf);
file_close(fd);
storeRelease(e);
if (e->swap_file_number != -1) {
return;
}
debug(20, 6, "storeSwapOutHandle: e->swap_offset = %d\n",
- e->mem_obj->swap_offset);
+ mem->swap_offset);
debug(20, 6, "storeSwapOutHandle: e->e_swap_buf_len = %d\n",
- e->mem_obj->e_swap_buf_len);
+ mem->e_swap_buf_len);
debug(20, 6, "storeSwapOutHandle: e->object_len = %d\n",
e->object_len);
debug(20, 6, "storeSwapOutHandle: store_swap_size = %dk\n",
store_swap_size);
- e->mem_obj->swap_offset += e->mem_obj->e_swap_buf_len;
+ mem->swap_offset += mem->e_swap_buf_len;
/* round up */
- store_swap_size += ((e->mem_obj->e_swap_buf_len + 1023) >> 10);
- if (e->mem_obj->swap_offset >= e->object_len) {
+ store_swap_size += ((mem->e_swap_buf_len + 1023) >> 10);
+ if (mem->swap_offset >= e->object_len) {
/* swapping complete */
e->swap_status = SWAP_OK;
- file_close(e->mem_obj->swap_fd);
+ file_close(mem->swapout_fd);
storeLog(STORE_LOG_SWAPOUT, e);
debug(20, 5, "storeSwapOutHandle: SwapOut complete: <URL:%s> to %s.\n",
e->url, storeSwapFullPath(e->swap_file_number, NULL));
- put_free_8k_page(page_ptr);
+ put_free_8k_page(mem->e_swap_buf);
sprintf(logmsg, "%s %s %d %d %d\n",
filename,
e->url,
(int) e->expires,
(int) e->timestamp,
e->object_len);
- /* Automatically freed by file_write because no-handlers */
file_write(swaplog_fd,
xstrdup(logmsg),
strlen(logmsg),
swaplog_lock,
NULL,
- NULL);
+ NULL,
+ xfree);
CacheInfo->proto_newobject(CacheInfo,
- e->mem_obj->request->protocol,
+ mem->request->protocol,
e->object_len,
FALSE);
/* check if it's request to be released. */
}
/* write some more data, reschedule itself. */
storeCopy(e,
- e->mem_obj->swap_offset,
+ mem->swap_offset,
SWAP_BUF,
- e->mem_obj->e_swap_buf,
- &(e->mem_obj->e_swap_buf_len));
- file_write(e->mem_obj->swap_fd,
- e->mem_obj->e_swap_buf,
- e->mem_obj->e_swap_buf_len,
- e->mem_obj->e_swap_access,
+ mem->e_swap_buf,
+ &(mem->e_swap_buf_len));
+ file_write(mem->swapout_fd,
+ mem->e_swap_buf,
+ mem->e_swap_buf_len,
+ mem->e_swap_access,
storeSwapOutHandle,
- e);
+ e,
+ NULL);
return;
}
{
int fd;
static char swapfilename[MAX_FILE_NAME_LEN];
-
+ int x;
+ MemObject *mem = e->mem_obj;
/* Suggest a new swap file number */
swapfileno = (swapfileno + 1) % (MAX_SWAP_FILE);
/* Record the number returned */
swapfileno = file_map_allocate(swapfileno);
storeSwapFullPath(swapfileno, swapfilename);
-
- fd = file_open(swapfilename, NULL, O_RDWR | O_CREAT | O_TRUNC);
+ fd = file_open(swapfilename, NULL, O_WRONLY | O_CREAT | O_TRUNC);
if (fd < 0) {
debug(20, 0, "storeSwapOutStart: Unable to open swapfile: %s\n",
swapfilename);
e->swap_file_number = -1;
return -1;
}
- e->mem_obj->swap_fd = (short) fd;
+ mem->swapout_fd = (short) fd;
debug(20, 5, "storeSwapOutStart: Begin SwapOut <URL:%s> to FD %d FILE %s.\n",
e->url, fd, swapfilename);
-
e->swap_file_number = swapfileno;
- if ((e->mem_obj->e_swap_access = file_write_lock(e->mem_obj->swap_fd)) < 0) {
+ if ((mem->e_swap_access = file_write_lock(mem->swapout_fd)) < 0) {
debug(20, 0, "storeSwapOutStart: Unable to lock swapfile: %s\n",
swapfilename);
file_map_bit_reset(e->swap_file_number);
return -1;
}
e->swap_status = SWAPPING_OUT;
- e->mem_obj->swap_offset = 0;
- e->mem_obj->e_swap_buf = get_free_8k_page();
- e->mem_obj->e_swap_buf_len = 0;
-
- storeCopy(e, 0, SWAP_BUF, e->mem_obj->e_swap_buf,
- &(e->mem_obj->e_swap_buf_len));
-
+ mem->swap_offset = 0;
+ mem->e_swap_buf = get_free_8k_page();
+ mem->e_swap_buf_len = 0;
+ storeCopy(e,
+ 0,
+ SWAP_BUF,
+ mem->e_swap_buf,
+ &(mem->e_swap_buf_len));
/* start swapping daemon */
- if (file_write(e->mem_obj->swap_fd,
- e->mem_obj->e_swap_buf,
- e->mem_obj->e_swap_buf_len,
- e->mem_obj->e_swap_access,
- storeSwapOutHandle,
- e) != DISK_OK) {
- /* This shouldn't happen */
- fatal_dump(NULL);
- }
+ x = file_write(mem->swapout_fd,
+ mem->e_swap_buf,
+ mem->e_swap_buf_len,
+ mem->e_swap_access,
+ storeSwapOutHandle,
+ e,
+ NULL);
+ if (x != DISK_OK)
+ fatal_dump(NULL); /* This shouldn't happen */
return 0;
}
/* load a number of objects per invocation */
for (count = 0; count < data->speed; count++) {
if (!fgets(data->line_in, 4095, data->log))
- return 0; /* We are done */
+ return !diskWriteIsComplete(swaplog_fd); /* We are done */
if ((++data->linecount & 0xFFF) == 0)
debug(20, 1, " %7d Lines read so far.\n", data->linecount);
strlen(logmsg),
swaplog_lock,
NULL,
- NULL);
+ NULL,
+ xfree);
storeAddDiskRestore(url,
sfileno,
(int) size,
(int) size,
TRUE);
}
-
return 1;
}
if (file_write_unlock(swaplog_fd, swaplog_lock) != DISK_OK)
fatal_dump("storeRebuiltFromDisk: swaplog unlock failed");
file_close(swaplog_fd);
- if ((swaplog_fd = file_open(swaplog_file, NULL, O_WRONLY | O_CREAT | O_APPEND)) < 0)
+ if ((swaplog_fd = file_open(swaplog_file, NULL, O_WRONLY | O_CREAT)) < 0)
fatal_dump("storeRebuiltFromDisk: file_open(swaplog_file) failed");
swaplog_lock = file_write_lock(swaplog_fd);
}
if (swaplog_fd > -1)
file_close(swaplog_fd);
sprintf(tmp_filename, "%s.new", swaplog_file);
- swaplog_fd = file_open(tmp_filename, NULL,
- O_WRONLY | O_CREAT | O_APPEND | O_TRUNC);
+ swaplog_fd = file_open(tmp_filename, NULL, O_WRONLY | O_CREAT | O_TRUNC);
debug(20, 3, "swaplog_fd %d is now '%s'\n", swaplog_fd, tmp_filename);
if (swaplog_fd < 0) {
debug(20, 0, "storeStartRebuildFromDisk: %s: %s\n",
if (strcmp((fname = getStoreLogFile()), "none") == 0)
storelog_fd = -1;
else
- storelog_fd = file_open(fname, NULL, O_WRONLY | O_APPEND | O_CREAT);
+ storelog_fd = file_open(fname, NULL, O_WRONLY | O_CREAT);
if (storelog_fd < 0)
debug(20, 1, "Store logging disabled\n");
sprintf(swaplog_file, "%s/log", swappath(0));
- swaplog_fd = file_open(swaplog_file, NULL, O_WRONLY | O_CREAT | O_APPEND);
+ swaplog_fd = file_open(swaplog_file, NULL, O_WRONLY | O_CREAT);
debug(20, 3, "swaplog_fd %d is now '%s'\n", swaplog_fd, swaplog_file);
if (swaplog_fd < 0) {
sprintf(tmp_error_buf, "Cannot open swap logfile: %s", swaplog_file);
return 0;
}
file_close(swaplog_fd);
- swaplog_fd = file_open(swaplog_file, NULL, O_RDWR | O_CREAT | O_APPEND);
+ swaplog_fd = file_open(swaplog_file, NULL, O_WRONLY | O_CREAT);
if (swaplog_fd < 0) {
sprintf(tmp_error_buf, "Cannot open swap logfile: %s", swaplog_file);
fatal(tmp_error_buf);
sprintf(to, "%s.%d", fname, 0);
rename(fname, to);
}
- storelog_fd = file_open(fname, NULL, O_WRONLY | O_APPEND | O_CREAT);
+ storelog_fd = file_open(fname, NULL, O_WRONLY | O_CREAT);
if (storelog_fd < 0) {
debug(20, 0, "storeRotateLog: %s: %s\n", fname, xstrerror());
debug(20, 1, "Store logging disabled\n");