Spaces:
Build error
Build error
File size: 2,317 Bytes
d8435ba |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
use actix_web::{post, put, web, Responder};
use actix_web_validator::{Json, Path, Query};
use collection::operations::cluster_ops::{
ClusterOperations, CreateShardingKey, CreateShardingKeyOperation, DropShardingKey,
DropShardingKeyOperation,
};
use storage::dispatcher::Dispatcher;
use tokio::time::Instant;
use crate::actix::api::collections_api::WaitTimeout;
use crate::actix::api::CollectionPath;
use crate::actix::auth::ActixAccess;
use crate::actix::helpers::process_response;
use crate::common::collections::do_update_collection_cluster;
// ToDo: introduce API for listing shard keys
#[put("/collections/{name}/shards")]
async fn create_shard_key(
dispatcher: web::Data<Dispatcher>,
collection: Path<CollectionPath>,
request: Json<CreateShardingKey>,
Query(query): Query<WaitTimeout>,
ActixAccess(access): ActixAccess,
) -> impl Responder {
let timing = Instant::now();
let wait_timeout = query.timeout();
let dispatcher = dispatcher.into_inner();
let request = request.into_inner();
let operation = ClusterOperations::CreateShardingKey(CreateShardingKeyOperation {
create_sharding_key: request,
});
let response = do_update_collection_cluster(
&dispatcher,
collection.name.clone(),
operation,
access,
wait_timeout,
)
.await;
process_response(response, timing, None)
}
#[post("/collections/{name}/shards/delete")]
async fn delete_shard_key(
dispatcher: web::Data<Dispatcher>,
collection: Path<CollectionPath>,
request: Json<DropShardingKey>,
Query(query): Query<WaitTimeout>,
ActixAccess(access): ActixAccess,
) -> impl Responder {
let timing = Instant::now();
let wait_timeout = query.timeout();
let dispatcher = dispatcher.into_inner();
let request = request.into_inner();
let operation = ClusterOperations::DropShardingKey(DropShardingKeyOperation {
drop_sharding_key: request,
});
let response = do_update_collection_cluster(
&dispatcher,
collection.name.clone(),
operation,
access,
wait_timeout,
)
.await;
process_response(response, timing, None)
}
pub fn config_shards_api(cfg: &mut web::ServiceConfig) {
cfg.service(create_shard_key).service(delete_shard_key);
}
|