DMS are now locked when used by a command. Added checks and changed
cleaning mechanisms.
This commit is contained in:
@ -2437,6 +2437,127 @@ int obi_column_prepare_to_get_value(OBIDMS_column_p column, index_t line_nb)
|
||||
}
|
||||
|
||||
|
||||
int obi_dms_has_unfinished_columns(OBIDMS_p dms)
|
||||
{
|
||||
struct dirent* dms_dirent;
|
||||
struct dirent* col_dirent;
|
||||
DIR* col_dir;
|
||||
size_t i,j;
|
||||
char* column_file_path;
|
||||
char* column_dir_path;
|
||||
char* col_name;
|
||||
char* col_version_str;
|
||||
// char* version_file;
|
||||
obiversion_t col_version;
|
||||
OBIDMS_column_header_p col_header;
|
||||
// int n;
|
||||
char* col_to_delete[1000];
|
||||
char* dir_to_delete[1000];
|
||||
int ddir;
|
||||
int dcol;
|
||||
int d;
|
||||
int ret_value;
|
||||
|
||||
ret_value = 0;
|
||||
|
||||
// Find column directories
|
||||
ddir = 0;
|
||||
rewinddir(dms->directory);
|
||||
while ((dms_dirent = readdir(dms->directory)) != NULL)
|
||||
{
|
||||
if ((dms_dirent->d_name)[0] == '.')
|
||||
continue;
|
||||
i=0;
|
||||
while (((dms_dirent->d_name)[i] != '.') && (i < strlen(dms_dirent->d_name)))
|
||||
i++;
|
||||
if ((i != strlen(dms_dirent->d_name)) && (strcmp((dms_dirent->d_name)+i, ".obicol") == 0)) // Found a column directory
|
||||
{
|
||||
column_dir_path = obi_dms_get_full_path(dms, dms_dirent->d_name);
|
||||
if (column_dir_path == NULL)
|
||||
{
|
||||
obidebug(1, "\nError getting a column directory path when deleting unfinished columns");
|
||||
ret_value = -1;
|
||||
}
|
||||
col_name = (char*) malloc(strlen(dms_dirent->d_name) * sizeof(char));
|
||||
if (col_name == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_MALLOC_ERROR);
|
||||
obidebug(1, "\nError allocating memory for a column name when deleting unfinished columns: directory %s", dms_dirent->d_name);
|
||||
ret_value = -1;
|
||||
continue;
|
||||
}
|
||||
strncpy(col_name, dms_dirent->d_name, i);
|
||||
col_name[i] = '\0';
|
||||
col_dir = opendir_in_dms(dms, dms_dirent->d_name);
|
||||
if (col_dir == NULL)
|
||||
{
|
||||
obidebug(1, "\nError opening a column directory when deleting unfinished columns");
|
||||
ret_value = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Iteration on files of this column directory
|
||||
dcol = 0;
|
||||
while ((col_dirent = readdir(col_dir)) != NULL)
|
||||
{
|
||||
if ((col_dirent->d_name)[0] == '.')
|
||||
continue;
|
||||
i=0;
|
||||
j=0;
|
||||
while (((col_dirent->d_name)[i] != '@') && ((col_dirent->d_name)[i] != '.'))
|
||||
i++;
|
||||
if ((col_dirent->d_name)[i] == '@') // Found a column file
|
||||
{
|
||||
i++;
|
||||
j=i;
|
||||
while ((col_dirent->d_name)[j] != '.')
|
||||
j++;
|
||||
col_version_str = (char*) malloc(strlen(col_dirent->d_name) * sizeof(char));
|
||||
if (col_version_str == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_MALLOC_ERROR);
|
||||
obidebug(1, "\nError allocating memory for a column version when deleting unfinished columns: directory %s", dms_dirent->d_name);
|
||||
ret_value = -1;
|
||||
continue;
|
||||
}
|
||||
strncpy(col_version_str, (col_dirent->d_name)+i, j-i);
|
||||
col_version_str[j-i] = '\0';
|
||||
col_version = atoi(col_version_str);
|
||||
free(col_version_str);
|
||||
col_header = obi_column_get_header_from_name(dms, col_name, col_version);
|
||||
if (col_header == NULL) // TODO discuss if delete file or not
|
||||
{
|
||||
obidebug(1, "\nError reading a column header when deleting unfinished columns: file %s", col_dirent->d_name);
|
||||
ret_value = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if the column is finished and delete it if not
|
||||
if (col_header->finished == false)
|
||||
ret_value = 1;
|
||||
// Close the header
|
||||
if (obi_close_header(col_header) < 0)
|
||||
ret_value = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// Close column directory
|
||||
if (closedir(col_dir) < 0)
|
||||
{
|
||||
obi_set_errno(OBICOL_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError closing a column directory when deleting unfinished columns");
|
||||
ret_value = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
free(col_name);
|
||||
}
|
||||
}
|
||||
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
|
||||
int obi_clean_unfinished_columns(OBIDMS_p dms)
|
||||
{
|
||||
struct dirent* dms_dirent;
|
||||
|
Reference in New Issue
Block a user