Пример #1
0
static int
put_commit_start (CcnetProcessor *processor, int argc, char **argv)
{
    char *head_id, *remote_id = NULL;
    char *session_token;
    USE_PRIV;

    if (argc < 2) {
        ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0);
        ccnet_processor_done (processor, FALSE);
        return -1;
    }

    if (argc == 2) {
        head_id = argv[0];
        session_token = argv[1];
    } else if (argc >= 3) {
        head_id = argv[0];
        remote_id = argv[1];
        session_token = argv[2];
    }

    if (strlen(head_id) != 40 || (remote_id && strlen(remote_id) != 40)) {
        ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0);
        ccnet_processor_done (processor, FALSE);
        return -1;
    }

    if (seaf_token_manager_verify_token (seaf->token_mgr,
                                         processor->peer_id,
                                         session_token, NULL) < 0) {
        ccnet_processor_send_response (processor, 
                                       SC_ACCESS_DENIED, SS_ACCESS_DENIED,
                                       NULL, 0);
        ccnet_processor_done (processor, FALSE);
        return -1;
    }

    memcpy (priv->head_commit_id, head_id, 41);
    if (remote_id != NULL)
        memcpy (priv->remote_commit_id, remote_id, 41);
    ccnet_processor_send_response (processor, SC_OK, SS_OK, NULL, 0);

    priv->reader_id =
        seaf_obj_store_register_async_read (seaf->commit_mgr->obj_store,
                                            read_done_cb,
                                            processor);
    priv->registered = TRUE;

    ccnet_processor_thread_create (processor,
                                   seaf->job_mgr,
                                   collect_commit_id_thread,
                                   collect_commit_id_done,
                                   processor);

    return 0;
}
Пример #2
0
static void
register_async_io (CcnetProcessor *processor)
{
    USE_PRIV;

    priv->registered = TRUE;
    priv->reader_id = seaf_obj_store_register_async_read (seaf->fs_mgr->obj_store,
                                                          priv->store_id,
                                                          priv->repo_version,
                                                          fs_object_read_cb,
                                                          processor);
}
Пример #3
0
static void
register_async_io (CcnetProcessor *processor)
{
    USE_PRIV;

    priv->registered = TRUE;
    priv->reader_id = seaf_obj_store_register_async_read (seaf->fs_mgr->obj_store,
                                                          on_seafdir_read,
                                                          processor);
    priv->stat_id = seaf_obj_store_register_async_stat (seaf->fs_mgr->obj_store,
                                                          on_seafile_stat,
                                                          processor);
    priv->writer_id = seaf_obj_store_register_async_write (seaf->fs_mgr->obj_store,
                                                           on_fs_write,
                                                           processor);
}
Пример #4
0
static void
collect_commit_id_done (void *vprocessor)
{
    CcnetProcessor *processor = vprocessor;
    USE_PRIV;

    if (!priv->id_list) {
        ccnet_processor_send_response (processor, SC_NOT_FOUND, SS_NOT_FOUND,
                                       NULL, 0);
        ccnet_processor_done (processor, FALSE);
        return;
    }

    priv->reader_id =
        seaf_obj_store_register_async_read (seaf->commit_mgr->obj_store,
                                            priv->repo_id,
                                            priv->repo_version,
                                            read_done_cb,
                                            processor);
    priv->registered = TRUE;

    read_and_send_commit (processor);
}