@@ -44,24 +44,26 @@ use quickwit_proto::metastore::{
4444 CreateIndexResponse , CreateIndexTemplateRequest , DeleteIndexRequest ,
4545 DeleteIndexTemplatesRequest , DeleteQuery , DeleteShardsRequest , DeleteShardsResponse ,
4646 DeleteSourceRequest , DeleteSplitsRequest , DeleteTask , EmptyResponse , EntityKind ,
47- FindIndexTemplateMatchesRequest , FindIndexTemplateMatchesResponse , GetIndexTemplateRequest ,
48- GetIndexTemplateResponse , IndexMetadataFailure , IndexMetadataFailureReason ,
49- IndexMetadataRequest , IndexMetadataResponse , IndexTemplateMatch , IndexesMetadataRequest ,
50- IndexesMetadataResponse , LastDeleteOpstampRequest , LastDeleteOpstampResponse ,
51- ListDeleteTasksRequest , ListDeleteTasksResponse , ListIndexTemplatesRequest ,
52- ListIndexTemplatesResponse , ListIndexesMetadataRequest , ListIndexesMetadataResponse ,
53- ListShardsRequest , ListShardsResponse , ListSplitsRequest , ListSplitsResponse ,
54- ListStaleSplitsRequest , MarkSplitsForDeletionRequest , MetastoreError , MetastoreResult ,
55- MetastoreService , MetastoreServiceStream , OpenShardSubrequest , OpenShardsRequest ,
56- OpenShardsResponse , PruneShardsRequest , PublishSplitsRequest , ResetSourceCheckpointRequest ,
57- StageSplitsRequest , ToggleSourceRequest , UpdateIndexRequest , UpdateSourceRequest ,
58- UpdateSplitsDeleteOpstampRequest , UpdateSplitsDeleteOpstampResponse , serde_utils,
47+ FindIndexTemplateMatchesRequest , FindIndexTemplateMatchesResponse , GetClusterIdentityRequest ,
48+ GetClusterIdentityResponse , GetIndexTemplateRequest , GetIndexTemplateResponse ,
49+ IndexMetadataFailure , IndexMetadataFailureReason , IndexMetadataRequest , IndexMetadataResponse ,
50+ IndexTemplateMatch , IndexesMetadataRequest , IndexesMetadataResponse , LastDeleteOpstampRequest ,
51+ LastDeleteOpstampResponse , ListDeleteTasksRequest , ListDeleteTasksResponse ,
52+ ListIndexTemplatesRequest , ListIndexTemplatesResponse , ListIndexesMetadataRequest ,
53+ ListIndexesMetadataResponse , ListShardsRequest , ListShardsResponse , ListSplitsRequest ,
54+ ListSplitsResponse , ListStaleSplitsRequest , MarkSplitsForDeletionRequest , MetastoreError ,
55+ MetastoreResult , MetastoreService , MetastoreServiceStream , OpenShardSubrequest ,
56+ OpenShardsRequest , OpenShardsResponse , PruneShardsRequest , PublishSplitsRequest ,
57+ ResetSourceCheckpointRequest , StageSplitsRequest , ToggleSourceRequest , UpdateIndexRequest ,
58+ UpdateSourceRequest , UpdateSplitsDeleteOpstampRequest , UpdateSplitsDeleteOpstampResponse ,
59+ serde_utils,
5960} ;
6061use quickwit_proto:: types:: { IndexId , IndexUid } ;
6162use quickwit_storage:: Storage ;
6263use time:: OffsetDateTime ;
6364use tokio:: sync:: { Mutex , OwnedMutexGuard , RwLock } ;
6465use ulid:: Ulid ;
66+ use uuid:: Uuid ;
6567
6668use self :: file_backed_index:: FileBackedIndex ;
6769pub use self :: file_backed_metastore_factory:: FileBackedMetastoreFactory ;
@@ -1202,6 +1204,32 @@ impl MetastoreService for FileBackedMetastore {
12021204 }
12031205 Ok ( EmptyResponse { } )
12041206 }
1207+
1208+ // Get cluster identity api
1209+
1210+ // this returns a constant uuid. on first call, it generate said uuid if it doesn't already
1211+ // exists
1212+ async fn get_cluster_identity (
1213+ & self ,
1214+ _: GetClusterIdentityRequest ,
1215+ ) -> MetastoreResult < GetClusterIdentityResponse > {
1216+ let mut state_wlock_guard = self . state . write ( ) . await ;
1217+
1218+ if state_wlock_guard. identity . is_nil ( ) {
1219+ state_wlock_guard. identity = Uuid :: new_v4 ( ) ;
1220+
1221+ let manifest = state_wlock_guard. as_manifest ( ) ;
1222+
1223+ if let Err ( error) = save_manifest ( & * self . storage , & manifest) . await {
1224+ state_wlock_guard. identity = Uuid :: nil ( ) ;
1225+ return Err ( error) ;
1226+ }
1227+ }
1228+
1229+ Ok ( GetClusterIdentityResponse {
1230+ uuid : state_wlock_guard. identity . hyphenated ( ) . to_string ( ) ,
1231+ } )
1232+ }
12051233}
12061234
12071235impl MetastoreServiceExt for FileBackedMetastore { }
0 commit comments