MCPcopy Create free account
hub / github.com/couchbase/forestdb / fdb_kvs_header_copy

Function fdb_kvs_header_copy

src/kv_instance.cc:578–634  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

576}
577
578void fdb_kvs_header_copy(fdb_kvs_handle *handle,
579 struct filemgr *new_file,
580 struct docio_handle *new_dhandle,
581 uint64_t *new_file_kv_info_offset,
582 bool create_new)
583{
584 struct avl_node *a, *aa;
585 struct kvs_node *node_old, *node_new;
586
587 if (create_new) {
588 struct kvs_header *kv_header;
589 // copy KV header data in 'handle' to new file
590 _fdb_kvs_header_create(&kv_header);
591 // read from 'handle->dhandle', and import into 'new_file'
592 fdb_kvs_header_read(kv_header, handle->dhandle,
593 handle->kv_info_offset, handle->file->version, false);
594
595 // write KV header in 'new_file' using 'new_dhandle'
596 uint64_t new_kv_info_offset;
597 fdb_kvs_handle new_handle;
598 new_handle.file = new_file;
599 new_handle.dhandle = new_dhandle;
600 new_handle.kv_info_offset = BLK_NOT_FOUND;
601 new_kv_info_offset = fdb_kvs_header_append(&new_handle);
602 if (new_file_kv_info_offset) {
603 *new_file_kv_info_offset = new_kv_info_offset;
604 }
605
606 if (!filemgr_set_kv_header(new_file, kv_header, fdb_kvs_header_free,
607 false)) { // LCOV_EXCL_START
608 _fdb_kvs_header_free(kv_header);
609 } // LCOV_EXCL_STOP
610 fdb_kvs_header_reset_all_stats(new_file);
611 }
612
613 spin_lock(&handle->file->kv_header->lock);
614 spin_lock(&new_file->kv_header->lock);
615 // copy all in-memory custom cmp function pointers & seqnums
616 new_file->kv_header->default_kvs_cmp =
617 handle->file->kv_header->default_kvs_cmp;
618 new_file->kv_header->custom_cmp_enabled =
619 handle->file->kv_header->custom_cmp_enabled;
620 a = avl_first(handle->file->kv_header->idx_id);
621 while (a) {
622 node_old = _get_entry(a, struct kvs_node, avl_id);
623 aa = avl_search(new_file->kv_header->idx_id,
624 &node_old->avl_id, _kvs_cmp_id);
625 assert(aa); // MUST exist
626 node_new = _get_entry(aa, struct kvs_node, avl_id);
627 node_new->custom_cmp = node_old->custom_cmp;
628 node_new->seqnum = node_old->seqnum;
629 node_new->op_stat = node_old->op_stat;
630 a = avl_next(a);
631 }
632 spin_unlock(&new_file->kv_header->lock);
633 spin_unlock(&handle->file->kv_header->lock);
634}
635

Callers 1

_fdb_compact_fileFunction · 0.85

Calls 9

_fdb_kvs_header_createFunction · 0.85
fdb_kvs_header_readFunction · 0.85
fdb_kvs_header_appendFunction · 0.85
filemgr_set_kv_headerFunction · 0.85
_fdb_kvs_header_freeFunction · 0.85
avl_firstFunction · 0.85
avl_searchFunction · 0.85
avl_nextFunction · 0.85

Tested by

no test coverage detected