Example #1
0
void extend_tmp_file(int extend_portion)
{
    int64_t fileSizeCurrent;
    int64_t fileSizeNew;

    fileSizeCurrent = mb->tmp_file_cur_size;
    fileSizeNew = fileSizeCurrent + (int64_t)extend_portion * PAGE_SIZE;

    /* if mb->data_file_max_size == 0 than size is unlimited */
    if (mb->tmp_file_max_size > 0 && 
        fileSizeNew > mb->tmp_file_max_size * PAGE_SIZE)
        throw USER_EXCEPTION(SE1012);

    /* Extend the file. */ 
    if (!uSetEndOfFile(
            tmp_file_handler, 
            fileSizeNew, 
            U_FILE_BEGIN, 
            __sys_call_error)) throw USER_EXCEPTION(SE1014);
    
    mb->tmp_file_cur_size = fileSizeNew;

    mb->free_tmp_blocks = extend_file_helper(
                                tmp_file_handler,
                                fileSizeCurrent,
                                fileSizeNew,
                                mb->free_tmp_blocks,
                                TMP_LAYER_STARTS_WITH,
                                0,
                                false);
    elog(EL_LOG, ("Temp file has been extended, size: %" PRIx64 "", fileSizeNew));

    // !!! MASTER BLOCK HAS BEEN CHANGED
}
Example #2
0
int uCopyFile(const char *existing_file, const char *new_file, int fail_if_exists, sys_call_error_fun fun)
{
#ifdef _WIN32
    BOOL res = CopyFile(existing_file, new_file, fail_if_exists);
    if (res == 0)
        sys_call_error("CopyFile");
    return res;
#else

#define BUFFLEN 32768

    int c = 0;
    int des = 0;
    int src = 0;
    char buf[BUFFLEN];
    __int64 src_file_size = (__int64) 0;

    if (fail_if_exists)
        des = open(new_file, O_CREAT | O_EXCL | O_LARGEFILE | O_WRONLY | O_SYNC | O_TRUNC, U_SEDNA_DEFAULT_ACCESS_PERMISSIONS_MASK);
    else
        des = open(new_file, O_CREAT | O_LARGEFILE | O_WRONLY | O_SYNC | O_TRUNC, U_SEDNA_DEFAULT_ACCESS_PERMISSIONS_MASK);

    if (des == -1)
    {
        sys_call_error("open");
        return 0;
    }

    src = open(existing_file, O_LARGEFILE | O_RDONLY, U_SEDNA_DEFAULT_ACCESS_PERMISSIONS_MASK);
    if (src == -1)
    {
        sys_call_error("open");
        return 0;
    }

    if (uGetFileSize(src, &src_file_size, __sys_call_error) == 0)
        return 0;
    if (uSetEndOfFile(des, src_file_size, U_FILE_BEGIN, __sys_call_error) == 0)
        return 0;

    while ((c = read(src, buf, BUFFLEN)) > 0)
    {
        if (write(des, buf, c) != c)
        {
            sys_call_error("write");
            return 0;
        }
    }

    if (c < 0)
    {
        sys_call_error("read");
        return 0;
    }
    return 1;
#endif
}
Example #3
0
void extend_data_file(int extend_portion)
{
    int64_t fileSizeCurrent;
    int64_t fileSizeNew;

    fileSizeCurrent = mb->data_file_cur_size;
    fileSizeNew = fileSizeCurrent + (int64_t)extend_portion * PAGE_SIZE;

    /* if mb->data_file_max_size == 0 than size is unlimited */
    if (mb->data_file_max_size > 0 && 
        fileSizeNew > mb->data_file_max_size * PAGE_SIZE)
        throw USER_EXCEPTION(SE1011);
    
	llLogDecrease(fileSizeCurrent);
    
     /* Extend the file. */ 
    if (!uSetEndOfFile(
            data_file_handler, 
            fileSizeNew, 
            U_FILE_BEGIN, 
            __sys_call_error)) throw USER_EXCEPTION(SE1013);
    
    mb->data_file_cur_size = fileSizeNew;
   
    mb->free_data_blocks = extend_file_helper(
                                data_file_handler,
                                fileSizeCurrent,
                                fileSizeNew,
                                mb->free_data_blocks,
                                1,          /* 0-layer is reserved */
                                -PAGE_SIZE, /* since first block is master-block */
                                false);

    elog(EL_LOG, ("Data file has been extended, size: %" PRIx64 "", fileSizeNew));
    // !!! MASTER BLOCK HAS BEEN CHANGED
}