lardon3d/include/lardon3d/project_db.h

164 lines
4.8 KiB
C

#ifndef LARDON3D_PROJECT_DB_H
#define LARDON3D_PROJECT_DB_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <time.h>
#include <lardon3d/task.h>
enum {
LARDON3D_PROJECT_DB_SCHEMA_VERSION = 3,
LARDON3D_PROJECT_DB_ID_CAPACITY = 65,
LARDON3D_PROJECT_DB_KIND_CAPACITY = 65,
LARDON3D_PROJECT_DB_PATH_CAPACITY = 4096,
LARDON3D_PROJECT_DB_ERROR_CAPACITY = 256,
LARDON3D_PROJECT_DB_RECOVERY_PAGE_MAX = 256,
};
typedef struct Lardon3DProjectDb Lardon3DProjectDb;
typedef enum {
LARDON3D_PROJECT_DB_OK = 0,
LARDON3D_PROJECT_DB_INVALID_ARGUMENT,
LARDON3D_PROJECT_DB_NOT_FOUND,
LARDON3D_PROJECT_DB_BUSY,
LARDON3D_PROJECT_DB_UNSUPPORTED_SCHEMA,
LARDON3D_PROJECT_DB_CORRUPT,
LARDON3D_PROJECT_DB_CONSTRAINT,
LARDON3D_PROJECT_DB_IO_ERROR
} Lardon3DProjectDbResult;
typedef enum {
LARDON3D_DB_CHECKPOINT_DURABLE = 0,
LARDON3D_DB_CHECKPOINT_PUBLISHED_NOT_DURABLE
} Lardon3DProjectDbCheckpointDurability;
typedef enum {
LARDON3D_DB_ARTIFACT_STAGED = 0,
LARDON3D_DB_ARTIFACT_READY
} Lardon3DProjectDbArtifactState;
typedef struct {
char stable_id[LARDON3D_PROJECT_DB_ID_CAPACITY];
char name[LARDON3D_TASK_NAME_CAPACITY];
int64_t created_at;
int64_t updated_at;
} Lardon3DProjectDbProject;
typedef struct {
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
uint32_t format_version;
Lardon3DProjectDbCheckpointDurability durability;
int64_t updated_at;
} Lardon3DProjectDbCheckpoint;
typedef struct {
uint64_t task_id;
char name[LARDON3D_TASK_NAME_CAPACITY];
bool has_task_kind;
char task_kind[LARDON3D_TASK_KIND_CAPACITY];
uint32_t task_kind_version;
Lardon3DTaskState saved_state;
Lardon3DTaskState recovery_state;
unsigned int progress;
unsigned int sequence_count;
struct timespec started_at;
struct timespec finished_at;
int64_t updated_at;
bool has_checkpoint;
Lardon3DProjectDbCheckpoint checkpoint;
} Lardon3DProjectDbTask;
typedef struct {
char artifact_id[LARDON3D_PROJECT_DB_ID_CAPACITY];
char kind[LARDON3D_PROJECT_DB_KIND_CAPACITY];
char path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
Lardon3DProjectDbArtifactState state;
uint64_t size_bytes;
bool has_producer_task;
uint64_t producer_task_id;
int64_t created_at;
int64_t updated_at;
} Lardon3DProjectDbArtifact;
typedef struct {
uint64_t task_id;
char source_path[LARDON3D_PROJECT_DB_PATH_CAPACITY];
} Lardon3DProjectDbImageImport;
Lardon3DProjectDbResult lardon3d_project_db_open(
const char *path,
Lardon3DProjectDb **database,
char error[LARDON3D_PROJECT_DB_ERROR_CAPACITY]
);
void lardon3d_project_db_close(Lardon3DProjectDb *database);
bool lardon3d_project_db_last_error(
Lardon3DProjectDb *database,
char error[LARDON3D_PROJECT_DB_ERROR_CAPACITY]
);
unsigned int lardon3d_project_db_schema_version(Lardon3DProjectDb *database);
Lardon3DProjectDbResult lardon3d_project_db_set_project(
Lardon3DProjectDb *database,
const Lardon3DProjectDbProject *project
);
Lardon3DProjectDbResult lardon3d_project_db_get_project(
Lardon3DProjectDb *database,
Lardon3DProjectDbProject *project
);
Lardon3DProjectDbResult lardon3d_project_db_record_task(
Lardon3DProjectDb *database,
const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind,
uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
int64_t updated_at
);
Lardon3DProjectDbResult lardon3d_project_db_record_image_import_task(
Lardon3DProjectDb *database,
const Lardon3DTaskDurableSnapshot *snapshot,
const char *task_kind,
uint32_t task_kind_version,
const Lardon3DProjectDbCheckpoint *checkpoint,
const char *source_path,
int64_t updated_at
);
Lardon3DProjectDbResult lardon3d_project_db_load_image_import(
Lardon3DProjectDb *database,
uint64_t task_id,
Lardon3DProjectDbImageImport *parameters
);
Lardon3DProjectDbResult lardon3d_project_db_allocate_task_id(
Lardon3DProjectDb *database,
uint64_t *task_id
);
Lardon3DProjectDbResult lardon3d_project_db_load_task(
Lardon3DProjectDb *database,
uint64_t task_id,
Lardon3DProjectDbTask *task
);
Lardon3DProjectDbResult lardon3d_project_db_list_recoverable(
Lardon3DProjectDb *database,
uint64_t after_task_id,
Lardon3DProjectDbTask *tasks,
size_t capacity,
size_t *count
);
Lardon3DProjectDbResult lardon3d_project_db_create_artifact(
Lardon3DProjectDb *database,
const Lardon3DProjectDbArtifact *artifact
);
Lardon3DProjectDbResult lardon3d_project_db_mark_artifact_ready(
Lardon3DProjectDb *database,
const char *artifact_id,
int64_t updated_at
);
Lardon3DProjectDbResult lardon3d_project_db_load_artifact(
Lardon3DProjectDb *database,
const char *artifact_id,
Lardon3DProjectDbArtifact *artifact
);
#endif