コード例 #1
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
void
IxManager_Set_Folder_IMP(IndexManager *self, Folder *folder) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    Folder *temp = ivars->folder;
    ivars->folder = (Folder*)INCREF(folder);
    DECREF(temp);
}
コード例 #2
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
String*
IxManager_Make_Snapshot_Filename_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    Folder *folder = (Folder*)CERTIFY(ivars->folder, FOLDER);
    DirHandle *dh = Folder_Open_Dir(folder, NULL);
    uint64_t max_gen = 0;

    if (!dh) { RETHROW(INCREF(Err_get_error())); }
    while (DH_Next(dh)) {
        String *entry = DH_Get_Entry(dh);
        if (Str_Starts_With_Utf8(entry, "snapshot_", 9)
            && Str_Ends_With_Utf8(entry, ".json", 5)
           ) {
            uint64_t gen = IxFileNames_extract_gen(entry);
            if (gen > max_gen) { max_gen = gen; }
        }
        DECREF(entry);
    }
    DECREF(dh);

    uint64_t new_gen = max_gen + 1;
    char  base36[StrHelp_MAX_BASE36_BYTES];
    StrHelp_to_base36(new_gen, &base36);
    return Str_newf("snapshot_%s.json", &base36);
}
コード例 #3
0
void
IxManager_Set_Merge_Lock_Interval_IMP(IndexManager *self, uint32_t interval) {
    if (interval > INT32_MAX) {
        THROW(ERR, "Interval can't be greater than INT32_MAX: %u32", interval);
    }
    IxManager_IVARS(self)->merge_lock_interval = interval;
}
コード例 #4
0
void
IxManager_Set_Merge_Lock_Timeout_IMP(IndexManager *self, uint32_t timeout) {
    if (timeout > INT32_MAX) {
        THROW(ERR, "Timeout can't be greater than INT32_MAX: %u32", timeout);
    }
    IxManager_IVARS(self)->merge_lock_timeout = timeout;
}
コード例 #5
0
ファイル: IndexManager.c プロジェクト: apache/lucy
void
IxManager_Destroy_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    DECREF(ivars->host);
    DECREF(ivars->folder);
    SUPER_DESTROY(self, INDEXMANAGER);
}
コード例 #6
0
ファイル: IndexManager.c プロジェクト: apache/lucy
Lock*
IxManager_Make_Merge_Lock_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    String *merge_lock_name = SSTR_WRAP_C("merge");
    return (Lock*)LFLock_new(ivars->folder, merge_lock_name, ivars->host,
                             (int32_t)ivars->merge_lock_timeout,
                             (int32_t)ivars->merge_lock_interval,
                             true);
}
コード例 #7
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
Lock*
IxManager_Make_Merge_Lock_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    String *merge_lock_name = SSTR_WRAP_C("merge");
    LockFactory *lock_factory = S_obtain_lock_factory(self);
    return LockFact_Make_Lock(lock_factory, merge_lock_name,
                              ivars->merge_lock_timeout,
                              ivars->merge_lock_interval);
}
コード例 #8
0
Lock*
IxManager_Make_Deletion_Lock_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    String *lock_name = SSTR_WRAP_C("deletion");
    LockFactory *lock_factory = S_obtain_lock_factory(self);
    return LockFact_Make_Lock(lock_factory, lock_name,
                              (int32_t)ivars->deletion_lock_timeout,
                              (int32_t)ivars->deletion_lock_interval);
}
コード例 #9
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
static LockFactory*
S_obtain_lock_factory(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    if (!ivars->lock_factory) {
        if (!ivars->folder) {
            THROW(ERR, "Can't create a LockFactory without a Folder");
        }
        ivars->lock_factory = LockFact_new(ivars->folder, ivars->host);
    }
    return ivars->lock_factory;
}
コード例 #10
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
void
IxManager_Write_Merge_Data_IMP(IndexManager *self, int64_t cutoff) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    String *merge_json = SSTR_WRAP_C("merge.json");
    Hash *data = Hash_new(1);
    bool success;
    Hash_Store_Utf8(data, "cutoff", 6, (Obj*)Str_newf("%i64", cutoff));
    success = Json_spew_json((Obj*)data, ivars->folder, merge_json);
    DECREF(data);
    if (!success) {
        THROW(ERR, "Failed to write to %o", merge_json);
    }
}
コード例 #11
0
ファイル: IndexManager.c プロジェクト: apache/lucy
IndexManager*
IxManager_init(IndexManager *self, String *host) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    ivars->host                = host
                                ? Str_Clone(host)
                                : Str_new_from_trusted_utf8("", 0);
    ivars->folder              = NULL;
    ivars->write_lock_timeout  = 1000;
    ivars->write_lock_interval = 100;
    ivars->merge_lock_timeout  = 0;
    ivars->merge_lock_interval = 1000;

    return self;
}
コード例 #12
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
IndexManager*
IxManager_init(IndexManager *self, String *host,
               LockFactory *lock_factory) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    ivars->host                = host
                                ? Str_Clone(host)
                                : Str_new_from_trusted_utf8("", 0);
    ivars->lock_factory        = (LockFactory*)INCREF(lock_factory);
    ivars->folder              = NULL;
    ivars->write_lock_timeout  = 1000;
    ivars->write_lock_interval = 100;
    ivars->merge_lock_timeout  = 0;
    ivars->merge_lock_interval = 1000;
    ivars->deletion_lock_timeout  = 1000;
    ivars->deletion_lock_interval = 100;

    return self;
}
コード例 #13
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
Hash*
IxManager_Read_Merge_Data_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    String *merge_json = SSTR_WRAP_C("merge.json");
    if (Folder_Exists(ivars->folder, merge_json)) {
        Hash *stuff = (Hash*)Json_slurp_json(ivars->folder, merge_json);
        if (stuff) {
            CERTIFY(stuff, HASH);
            return stuff;
        }
        else {
            return Hash_new(0);
        }
    }
    else {
        return NULL;
    }
}
コード例 #14
0
ファイル: IndexManager.c プロジェクト: apache/lucy
Lock*
IxManager_Make_Snapshot_Lock_IMP(IndexManager *self, String *filename) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);

    if (!Str_Starts_With_Utf8(filename, "snapshot_", 9)
        || !Str_Ends_With_Utf8(filename, ".json", 5)
       ) {
        THROW(ERR, "Not a snapshot filename: %o", filename);
    }

    // Truncate ".json" from end of snapshot file name.
    size_t lock_name_len = Str_Length(filename) - (sizeof(".json") - 1);
    String *lock_name = Str_SubString(filename, 0, lock_name_len);

    Lock *lock = (Lock*)LFLock_new(ivars->folder, lock_name, ivars->host,
                                   1000, 100, false);

    DECREF(lock_name);
    return lock;
}
コード例 #15
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
bool
IxManager_Remove_Merge_Data_IMP(IndexManager *self) {
    IndexManagerIVARS *const ivars = IxManager_IVARS(self);
    String *merge_json = SSTR_WRAP_C("merge.json");
    return Folder_Delete(ivars->folder, merge_json) != 0;
}
コード例 #16
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
Folder*
IxManager_Get_Folder_IMP(IndexManager *self) {
    return IxManager_IVARS(self)->folder;
}
コード例 #17
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
void
IxManager_Set_Deletion_Lock_Timeout_IMP(IndexManager *self,
                                        uint32_t timeout) {
    IxManager_IVARS(self)->deletion_lock_timeout = timeout;
}
コード例 #18
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
void
IxManager_Set_Deletion_Lock_Interval_IMP(IndexManager *self,
                                         uint32_t interval) {
    IxManager_IVARS(self)->deletion_lock_interval = interval;
}
コード例 #19
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
void
IxManager_Set_Merge_Lock_Timeout_IMP(IndexManager *self, uint32_t timeout) {
    IxManager_IVARS(self)->merge_lock_timeout = timeout;
}
コード例 #20
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
void
IxManager_Set_Merge_Lock_Interval_IMP(IndexManager *self, uint32_t interval) {
    IxManager_IVARS(self)->merge_lock_interval = interval;
}
コード例 #21
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
uint32_t
IxManager_Get_Deletion_Lock_Interval_IMP(IndexManager *self) {
    return IxManager_IVARS(self)->deletion_lock_interval;
}
コード例 #22
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
uint32_t
IxManager_Get_Deletion_Lock_Timeout_IMP(IndexManager *self) {
    return IxManager_IVARS(self)->deletion_lock_timeout;
}
コード例 #23
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
uint32_t
IxManager_Get_Merge_Lock_Interval_IMP(IndexManager *self) {
    return IxManager_IVARS(self)->merge_lock_interval;
}
コード例 #24
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
uint32_t
IxManager_Get_Merge_Lock_Timeout_IMP(IndexManager *self) {
    return IxManager_IVARS(self)->merge_lock_timeout;
}
コード例 #25
0
ファイル: IndexManager.c プロジェクト: rectang/lucy
String*
IxManager_Get_Host_IMP(IndexManager *self) {
    return IxManager_IVARS(self)->host;
}